大家好,我是奶綠茶
今天來教大家如何發怖你的 Flash app , 到 Mobile 上,
軟體需求:
Adobe Flash CS5.5 或是 Adobe Flash Builder4.5
在這以 Flash CS5.5 來做教學
開啟新檔,選擇 AIR for Android
製作方法就和一般的 flash 寫法都一樣
但要注意一些小細節,
1:儘量使用點陣圖而不要用相量
Flash CS5.5 在物件的面版上,提供了新的方法,讓你可以在編譯後,幫你把 MovieClip 直接輸出成點陣圖
使用這個功能,該 MovieClip 就變成了一張圖檔, 裡面的功能會失效
另一個方法是全選你的相量物件,按一下右鍵後,會出現 Convert to Bitmap
2:不要使用 filter, blend mode, alpha
這些都是很吃效能的動作
Publish
General:
Output file:要輸出的 apk 檔名
App name:你的 app 名稱,會出現在 Android 上 icon 的名稱
App ID:這個跟上傳到 android Market 上會有很重要的關係
當你第一次上傳 apk 後, 之後每次更新的 apk 檔, 該 App ID 都要一樣,否則不能上傳
Version:一樣和上到到 android Market 有關,新的 apk 版本號要比前一版高才能上傳。
Version label:這個只是顯示用。
Aspect ratio:可以指定是 Portrait (直), Landscape(橫) 或是 Auto(自動)
Full screen:打勾的話,你的 app 會滿版,沒有的話,上面會保留 Android 的 Tital Bar
Auto orentation:是否自動旋轉。
Render mode:一般 flash 都是透過 CPU 在運算, 在 Mobile 上,可以選擇 GPU 加速。
Included files:編譯成 apk 時,同時把另外的檔案也加入,如圖片或是 sqlite等。
Deployment:
Certificate:驗證檔, 你可以按最右邊的 Create 產生一個屬於自己的驗證檔
Password:你的驗證檔密碼
Android deployment type:
在這雖然有 Emulator 的選項,但更新到 AIR2.6 後,裝上去執行都會出現 Error,如果有人測成功的話再麻煩告知方法。
還是乖乖選擇 Device release 吧
Get AIR runtime from:如果使用者安裝你的 apk , 發現沒有 AIR runtime 時,會到那兒下載
預設就選 Google Android Market吧
Icons:
Android 有三種 Size , 36x36 , 48x48, 72x72
Permissions:
這裡跟 Android 的 Permissions 是一樣的,只是目前 AIR for Android 還沒有那麼多可以選
如果你有需要用到特別的功能,都需要在這兒打勾才可以使用
比如說你要使用 Camera , 就要選 CAMERA
要錄音,就要選 RECORD_AUDIO
安裝 Android SDK
http://developer.android.com/sdk/index.html
接上你的 Android 手機, 按下發怖, 就可以成功上傳到你的手機上了。
關於 catchAsBitmap 和 catchAsBitmapMatrix
在 AIR2.6 裡
所有的 DisplayObject 多了一個 catchAsBitmapMatrix 可以使用
看一下 官方文件的說明
簡單來說,就是你的物件只有 move, rotation, alpha , scale 等動作時
可以開啟這樣的屬性,會讓你的效能更佳
而另一個 cacheAsBitmap 指的是如果物件只有移動的話,開啟該屬性效能會更佳
所以我就針對
什麼都不開啟
開 cacheAsBitmap
開 cacheAsBitmap和 cacheAsBitmapMatrix
並配合二種動作方試來做測試
測試的結果:
什麼都不開,二種動作都會 lag
只開 cacheAsBitmap, 在只有移動時,效能優,但如果加上 rotation 之類的話,比什麼都不開還要慢
開 cacheAsBitmapMatrix, 效能最優
祝大家學習愉快,
下一篇來分享 AIR for iOS
測試影片
補充一下:
你的 Android 手機必需是 2.2 以上版本
同時 CPU 是 v6 以上,才能安裝 AIR runtime.
轉載請註明出處
SourceCodeDownload
今天來教大家如何發怖你的 Flash app , 到 Mobile 上,
軟體需求:
Adobe Flash CS5.5 或是 Adobe Flash Builder4.5
在這以 Flash CS5.5 來做教學
開啟新檔,選擇 AIR for Android
製作方法就和一般的 flash 寫法都一樣
但要注意一些小細節,
1:儘量使用點陣圖而不要用相量
Flash CS5.5 在物件的面版上,提供了新的方法,讓你可以在編譯後,幫你把 MovieClip 直接輸出成點陣圖
使用這個功能,該 MovieClip 就變成了一張圖檔, 裡面的功能會失效
另一個方法是全選你的相量物件,按一下右鍵後,會出現 Convert to Bitmap
2:不要使用 filter, blend mode, alpha
這些都是很吃效能的動作
Publish
General:
Output file:要輸出的 apk 檔名
App name:你的 app 名稱,會出現在 Android 上 icon 的名稱
App ID:這個跟上傳到 android Market 上會有很重要的關係
當你第一次上傳 apk 後, 之後每次更新的 apk 檔, 該 App ID 都要一樣,否則不能上傳
Version:一樣和上到到 android Market 有關,新的 apk 版本號要比前一版高才能上傳。
Version label:這個只是顯示用。
Aspect ratio:可以指定是 Portrait (直), Landscape(橫) 或是 Auto(自動)
Full screen:打勾的話,你的 app 會滿版,沒有的話,上面會保留 Android 的 Tital Bar
Auto orentation:是否自動旋轉。
Render mode:一般 flash 都是透過 CPU 在運算, 在 Mobile 上,可以選擇 GPU 加速。
Included files:編譯成 apk 時,同時把另外的檔案也加入,如圖片或是 sqlite等。
Deployment:
Certificate:驗證檔, 你可以按最右邊的 Create 產生一個屬於自己的驗證檔
Password:你的驗證檔密碼
Android deployment type:
在這雖然有 Emulator 的選項,但更新到 AIR2.6 後,裝上去執行都會出現 Error,如果有人測成功的話再麻煩告知方法。
還是乖乖選擇 Device release 吧
Get AIR runtime from:如果使用者安裝你的 apk , 發現沒有 AIR runtime 時,會到那兒下載
預設就選 Google Android Market吧
Icons:
Android 有三種 Size , 36x36 , 48x48, 72x72
Permissions:
這裡跟 Android 的 Permissions 是一樣的,只是目前 AIR for Android 還沒有那麼多可以選
如果你有需要用到特別的功能,都需要在這兒打勾才可以使用
比如說你要使用 Camera , 就要選 CAMERA
要錄音,就要選 RECORD_AUDIO
安裝 Android SDK
http://developer.android.com/sdk/index.html
接上你的 Android 手機, 按下發怖, 就可以成功上傳到你的手機上了。
關於 catchAsBitmap 和 catchAsBitmapMatrix
在 AIR2.6 裡
所有的 DisplayObject 多了一個 catchAsBitmapMatrix 可以使用
看一下 官方文件的說明
簡單來說,就是你的物件只有 move, rotation, alpha , scale 等動作時
可以開啟這樣的屬性,會讓你的效能更佳
而另一個 cacheAsBitmap 指的是如果物件只有移動的話,開啟該屬性效能會更佳
所以我就針對
什麼都不開啟
開 cacheAsBitmap
開 cacheAsBitmap和 cacheAsBitmapMatrix
並配合二種動作方試來做測試
測試的結果:
什麼都不開,二種動作都會 lag
只開 cacheAsBitmap, 在只有移動時,效能優,但如果加上 rotation 之類的話,比什麼都不開還要慢
開 cacheAsBitmapMatrix, 效能最優
祝大家學習愉快,
下一篇來分享 AIR for iOS
測試影片
補充一下:
你的 Android 手機必需是 2.2 以上版本
同時 CPU 是 v6 以上,才能安裝 AIR runtime.
轉載請註明出處
SourceCodeDownload
留言
可惜我的android不能裝air..
我現在使用Flex Builder4.5寫Android的程式,是一個網路電話的程式. 程式的架構是"ViewNavigatorApplication" , 所以一定會有很多的View. 因為是網路電話,所以跟server常常會有資訊交換,例如撥號,來電...等等.
我想問的問題是如何在這些view(s)快速交換資料? 因為有很多資料是要傳到不同的view (parentApplication->view),也會回傳到程式的最上層(view->parentApplication), 目前我只知道用navigator.pushView可以帶資料到不同的view(可是一次好像只能一筆?),不過這樣不就代表一定要換view才能傳送資料? 請問奶綠茶老師有什麼方法可以讓這些view之間互相交換資料..這個問題困擾我很久,也找了蠻多文章,不過到目前為止還沒有找到解決方法,所以想說來這邊請教奶綠茶老師,請老師幫幫忙,謝謝!!
http://milkmidi.blogspot.com/2009/03/designpatternssingleton.html
應該可以很方便的決解你的問題
不過我不曉得singleton是否適用於我的程式...
如我上面提到,因為手機版本需要使用很多的view來切換不同畫面, 在我的root view會處理server傳過來的data(從其他.as告訴server要傳什麼資料過來),再根據這些data來控制其他view要怎麼動作,例如我現在可以從其中一個畫面撥號出去,但是當對方把電話接起來時,server會傳送一個命令過來告知我通話已建立,但我在撥號的那一個view就會收不到這筆通知的資訊,造成我撥號的view一直在顯示正在撥號..對方一接起來就出現錯誤,錯誤是發生在root view,所以讓我感覺不太像是要用singleton的作法....
然後想再問老師幾個問題:
(1)不同的view可以呼叫對方的function嗎? 我今天寫了一個小程式,view2是使用者輸入書字要做加法,view1接收使用者從view2所輸入的數字來做加法,再把結果從view1回傳給view2顯示結果,結果顯示錯誤.(num1 num2 sum 都是view2的元件)
parentApplication.view.cal(num1,num2);
sum=parentApplication.view1.num3;
結果顯示以下錯誤:
ReferenceError: Error #1069: Property view1 not found on TEST2 and there is no default value.
錯誤是在parentApplication.view.cal 這一行, 想請問老師如果要不同的view之間互項傳遞資料和互用對方的function要怎麼解決?
(2)在用view navigator時常會出現Error #1009
上次找到錯誤的原因是因為view裡面的元件為null,也就是系統把它砍掉了,是不是有什麼方式能保持每一個view的元件都存在?
不好意思,問題蠻多的,這些都是困擾我蠻久的問題,不過只有這樣講老師可能也很難理解我的問題點到底怎麼解決,如果之後有需要的話再把程式碼給老師看,用看的應該會比較清楚程式的架構,到時候再跟奶綠老師詳細討論.
麻煩你了~! 謝謝!
你的問題可以用 Singleton 解決
Singleton 除了可以記錄變數,也可以當作發送事件者,
root View 接到事件後,
透過 Singleton 轉發送事件
子 View 在 createComplete時,就對 Singleton 注冊該事件,
這樣就人人可以知道。
比較好的寫法,還是用 MVC 寫會更適合。
希望這樣有決解你的問題
我自己在寫 Mobile 或是 Web 時,都很常用 Singleton。
透過 Singleton 轉發送事件
子 View 在 createComplete時,就對 Singleton 注冊該事件,
這樣就人人可以知道。"
這句話真是讓我眼睛為之一亮啊~! 看到這句話彷彿我的程式就快完成了...XD!!
不曉得奶綠老師有沒有比較推薦的一些線上資源或是書籍,雖然有看過一些網路上的文章,但還是不太了解,第一次碰singleton和MVC,不曉得如何才能從基本的了解他們...
P.S:再請問老師一個問題,VIEW之間的FUNCTION可以互相呼叫嗎??
http://www.tenlong.com.tw/items/9867794524?item_id=33235
買回來 K 一下。
http://matishsiao.blogspot.com/2011/08/flashcs-5andorid-apk.html
flash 發佈android 之後
文字欄位無法輸入中文
但是可以輸入數字和英文
這問題可以解決嗎
請問你的手機是什麼型號呢
我用CS5.5寫了一個android的遊戲,
裡面有用了SQLite的資料庫,
在電腦上執行時完全功能都正常,
可是一旦轉成apk之後,安裝進手機都沒辦法使用資料庫內的資料,
請問我該怎麼寫才能讓程式讀取到資料庫呢??
附上我的部份程式碼,麻煩您指點一下,謝謝
var conn:SQLConnection = new SQLConnection();
var folder:File = new File(File.applicationDirectory.resolvePath("MyData.db").nativePath);
var runSQL:SQLStatement = new SQLStatement();
runSQL.sqlConnection = conn;
var bstmp:int = 0;
runSQL.parameters["@bbs"] = bbs;
conn.open(folder,SQLMode.READ);
runSQL.text = "SELECT logs FROM bslog WHERE bs = @bbs";
runSQL.execute();
var result:SQLResult = runSQL.getResult();
var row:Object = result.data;
bstmp = row.logs;
conn.close();
if (bstmp == 0 || bssg < bstmp)
{
bwin.patxt.text = "最佳紀錄:" + bssg.toString() + "步";
runSQL.parameters["@bbs"] = bbs;
runSQL.parameters["@logs"] = bssg;
conn.open(folder,SQLMode.UPDATE);
runSQL.text = "UPDATE bslog SET logs = @logs WHERE bs == @bbs";
runSQL.execute();
conn.close();
}
else if (bssg > bstmp)
{
bwin.patxt.text = "最佳紀錄:" + bstmp.toString() + "步";
}
轉成apk在手機上執行就沒辦法呼叫資料庫的資料
要怎麼解決呢???
謝謝老師
http://codepad.org/uBsl2i52
我是call AMFPHP呼叫我已經寫好的PHP class
然而這個class會幫我做查詢dababase的相關資訊
我可以在電腦上弄成swf檔執行,但是轉到手機上我的respoder就沒反應...
請問這是跟crossdomain.xml有關嗎??
應該是要讀的到
先查查看是不是載入的 .db 路徑有誤
To 壘包:
AIR 可以跨網域呼叫,
是不是 Android 的 INTERNET permission 沒開啟呢
一開啟就可以了
我竟然忘記最重要的權限...結果想好久
非常感謝老師
我發現可以的原因是因為我有寫個小捷徑測試,忘記註解掉,所以才誤以為有成功。但實際上我用去call PHP裡面的程式還是失敗的...
我有照老師的方式開啟那個permission,但還是不行...我還需要設定哪個部份呢?? 奇怪哩...囧
先試一般的 URLLoader 去試載一個 txt
看成不成功
然後再查一下 Server 端是不是有檔來源
但是他還是查詢不到我的資料庫檔案~
但是我在ADOBE上面查詢過相關的問題
裡面有寫到"發佈預先填入的資料庫"
但是對於"請使用來自 AIR 套件的檔案做為「範本」資料庫"這句話不是很能理解
請問這句話是十麼意思呢??
我該怎麼把我的資料庫檔案改成"範本資料庫"呢?
附上當時查詢的網址
http://help.adobe.com/zh_TW/AIR/1.1/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7d3c.html
再次的麻煩您了
但是很神奇,為什麼弄成swf檔loader可以執行
反而在手機上執行app,loader卻沒反應...
我困惑了- -...
不過這些成功的要素是我在學校Lab測試的,換到家裡就不行,即使有開權限。
我想是不是因為我的Web Server&Database架在學校的關係呢?導致它只能認Lab的網域??我有試著在amfphp資料夾裡面的service加加看crossdomain.xml,不過還是失敗...
不好意思又麻煩老師了!!
現在就是確定不是你的程式問題
差差 Server 端是不是有檔呼叫來源
非常感謝老師
如:Sony XPERIA X10解析度是480*820,可是XPERIA S 解析度高達1280。
想請問奶老師,有什麼解決方式嗎?
要自己想辦法定位
然後物件的座標也要跟者使用者的解悉度一起更改
不過通常會做一個比較通用的 size
然後再用程式去縮放
就是我是在FLASH CS5.5的環境下案CTRL+ENTER
進行對資料庫連結和增刪改查的測試
這時候都沒有問題
可是發佈到 ANDROID平板上的時候 就不能使用資料庫
想請問一下是甚麼問題