上一篇 簡要介紹了FlashToAnimation的功能,也就是將flash動畫無縫導入到Android/iOS及cocos2dx中運行, 這一篇介紹這個庫的使用方法。點此查看源碼。
首先確保系統中安裝了flash,並且flash版本應該在cs3或者以上。
然後把”源碼根目錄/tools/flashScript”目錄內的所有文件和文件夾copy到如下目錄:
在文件管理器(或Finder)目錄中看起來是這樣的:
--Commands
-- 1.根據png創建元件.jsfl
-- 2.修改fla中元素的名字.jsfl
-- 3.導出動畫數據.jsfl
-- libs/
--json2.jsfl
-- ....其他文件
如圖:
這時候打開flash,點擊菜單欄中的 Commands(中文的話應該是命令),在下拉菜單中就能看到我們加入的腳本啦。
到此為止准備工作就緒。
下面步驟看起來很長,其實內容很簡單,都是大家各自平時使用的經驗,在這裡寫這麼多是為了讓小白用戶不出錯而已。
美術人員使用步驟:
新建一個as3.0的Flash Document。
保存文檔,請務必保存文檔,否則腳本不生效,並按照如下規則命名:
fla的命名應該以 “.” 分為3部分:
測試.test.fla
第一部分:中文,對本文件的中文描述。(不重要,可以隨意取。)
第二部分:英文,表示本文件的英文標識符。(重要,在代碼中會使用到這個關鍵字。)
第三部分:後綴,默認即可不用管。(使用.fla即可。)
其中第一部分中文可忽略。
在新建的Flash文件窗口右側的Library欄中,點擊右鍵,新建一個文件夾名為“pics”(注意,名字不能錯,後面有類似的要求也要遵守)。
把制作flash的圖片(png格式)拖入pics文件夾中。[!!!注意,所有的png圖片必須帶後綴.png否則會出錯!]
點擊commands中的腳本“1.根據png創建元件”。結果如圖:
如果是cocos2dx中使用,為了避免Sprite Frame Cache重名,或者想要為圖片生成跟本動畫相關的獨一無二的前綴,可以點擊commands中的腳本“2.修改fla中元素的名字”。結果如下:
iOS可能也有此問題。因為直接拖入xcode中的文件一般選擇“create groups”,這個只是邏輯文件夾,如果其他文件夾內存在同名文件則會沖突。所以最好每次制作動畫,添加png圖片的時候,都執行一次腳本“2.修改fla中元素的名字“。
新建一個Movie clip(影片剪輯),取一個合適的名字。然後拖入anims文件夾中
雙擊該Movie clip,進入編輯模式,此時就可以使用eles文件夾中的Movie clip,制作動畫了。制作動畫的具體細節要求,見下面的要求。
制作完成後,保存,美術人員的工作就完成了。
程序拿到美術人員制作好的fla文件後,首先要進行一番檢查,看看是否合格。
所以需要確保程序員熟悉flash的頁面和菜單,並了解一些簡單的flash軟件操作。
如果需要給關鍵幀添加事件,需要選中該關鍵幀(首先在timeline中選中關鍵幀,然後在主頁面中選中該幀代表的圖片,過程中最好隱藏timeline中的其它層),然後點擊右側與library同級的標簽頁properties。在第一行標有 < Instance Name > 的輸入框,輸入你的事件名,程序能夠在播放到這一幀的時候,觸發這個事件。
事件添加完成後,選擇菜單:Commands(命令)- “3.導出動畫數據”。窗口底部同Timeline(時間軸)同級的Output(輸出)欄中會顯示腳本執行過程。
成功後,打開.fla文件所在的目錄,即可看到”.flajson文件”和.fla同名”圖片文件夾”(裡面是圖片)。
如果需要使用二進制動畫描述文件,則需要把”.flajson文件”轉為”.flabin文件”,這兩個後綴也不能改。
轉換需要使用腳本”源碼根目錄/tools/JsonToBin.py”文件。這是一個python腳本。如果系統內沒有python,則需要安裝一個。
然後打開命令行(mac中使用終端,Windows中可使用cmd)執行如下命令,執行後的.flabin就是轉換成二進制後的文件。
python 源碼根目錄/tools/JsonToBin.py [.flajson文件全路徑] [.flabin文件全路徑]
這時候可以把”.flajson文件”(或者 “.flabin文件”,二者使用其一即可,代碼庫內部處理,無需額外寫代碼判斷)和”圖片文件夾”放入程序指定目錄就可以使用了。
//cocos2dx版本使用方法
//包含頭文件
#include "AnimNode.h"
using namespace windy;
... ...
//使用代碼
AnimNode *animNode = AnimNode::create();
animNode->load("xxxx/flashFileName.flajson");
animNode->play("animationName", WINDY_ANIMNODE_LOOP_FOREVER);//這裡的animationName就是flash中anims文件夾內的動畫名稱
superNode->addChild(animNode);
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xcyo.yoyo.flashsupport.MainActivity">
FlashView:designDPI="326"
FlashView:loopTimes="0"
android:id="@+id/flashview"
/>
//iOS版本使用方法
#import "FlashView.h"
... ...
FlashView *flashView = [[FlashView alloc] initWithFlashName:@"flashFileName"];
flashView.frame = self.view.frame;// CGRectMake(100, 100, 200, 500);
flashView.backgroundColor = [UIColor clearColor];
[superView addSubview:flashView];
[flashView play:@"animationName" loopTimes:FOREVER];//這裡的animationName就是flash中anims文件夾內的動畫名稱