ScaleForm十六戒言

不知不覺,在不停地叫罵、哀嚎、驚歎、歡喜中,開發工作已經走過了一個節點了,UE3作爲一個頂級,維護多年的引擎,層層深入後,發現每一塊都有值得深入,值得改進的地方,平時負責一些場景,機關,交互的活,雜務很,UI也缺人,作爲一個火頭兵,so,這也是當仁不讓的,所以無意間對Scaleform也接觸了些許,昨日也正好和羣友聊到,一開始沒想到其中亦有很多好玩的地方,也是,無論什麼,深入下去,都是大有門道的~

 

平時忙得團團轉,現在,是時候靜下來好好消化一下的時候了,那就先從這個UI開始說起。

 

首先,SF庫的優勢體現在Flash工具上,動畫的精確可控性,脫離以往很多時候由程序員填個XML的山寨限制,美工可以自由地利用時間軸、幀與層展開效果,這個是很讚的,當然,漂亮是有代價的,實際應用中也遇到了諸多問題,畢竟,之前用過的人少之又少,大家都是摸着石頭過河,

  

所以這裏就總結幾點,大言不慚,但還不敢用箴字,姑且稱爲ScaleForm十六戒言,寄望能饗以後人,有同行的,更歡迎交流;


1.加入控件,謹記統一在第一幀預留關鍵幀,確保頭尾一致,否則很可能會在動畫播放之後,找不到對應的控件; 

 

2.Label,Action層,統一放置,規定好分工,標籤,AS代碼統一管理;


3.如需要動畫處理後再進行邏輯調用,可預留下對應函數名,在尾幀再進行調用;

 

4.自行擴展庫,如GFx上在建立自己的UI庫,大力提倡使用相對目錄包含,且注意,Flash文檔設置中的目錄優先級高於軟件選項中的AS庫設置;


5.千萬不要輕易改變控件名,否則,嘿嘿,等着一切從頭再來吧;


6.在Unreal中,SF控件,GfxObject都是臨時變量,它們是動態創建的,謹記;

 

7.零碎的圖素,SF支持如CEGUI的圖素打包處理,在位圖加上pack 屬性,一些特殊用例,則加上no-pack;

 

8.no-pack屬性可用在一些大圖,或者需要程序動態改變的,如RenderTarget(普通動態改變可以使用MovieClip打成一個mc,然後裏面用Label標記,不同圖素),RT的使用,在UE3中考慮需要多一些,SceneCapture,Alpha通道,Gamma變換,PostProcess,,具體偏題了,不再展開,只做一點建議,儘量規避半透明RT;


8.組件化非常總要,合理地抽出通用組件,會讓工作效率、程序效率事半功倍;


9.關於字體,官方就有文檔,謹記把它也看成是一個控件,統一管理,不要自行單獨使用一處字體; 

 

10.美術人員直接出的文件總是難以盡善盡美的,關於調試,尤其是UE3下,UScript腳本不能斷點,SF沒有源碼,以下兩點或許會成爲救命稻草,

A,別忘記原始的Flash調試,有更清晰的調試信息。B,千萬要注意輸出面板和編譯錯誤面板;

 

11.UE3下,Click Extension和GfxPlayer 一定要注意跟進,開發成員間保持同步,有時候莫名其妙的問題也許就出在這裏; 

 

12.Flash CS6在穩定,速度上絕對是個更好的選擇,很多時候軟件如同DC,選新不選舊; 

 

13.遊戲的縮放確實是個頭疼問題,上一個項目爲把折騰進入Facebook那小小的640窗口,沒少受苦,還好Flash的Stage本身支持 exactFit noScale等屬性,建議還是noScale,用動態對齊的方法來做,一些特殊需要拉伸的,再自行處理~


14.關於Package儲存,UE3的文件系統自有他一套王國,Flash導入後,texture的儲存要注意存放的格式,還有,不同遊戲階段如登陸,遊戲中、RT等,建議分包存儲(Flash就得使用不同目錄,否則,已經開工後,蜘蛛網一樣已經纏在一塊了,那就算了),方便調試,也可減輕項目管理工具的流量壓力(Package忒大...);


15.關於視頻,衆所周知,Flash的FLv出現,對在線視頻的意義是革命性的,早年上網,QuickTime,WMV都不給力,爲一個RealPlayer上在線影院,是電信拉高價格的得意價碼,再後來...好吧,可現在尊敬的SF大大竟然告訴我們想要播放視頻,請另付XXdollar,好吧,個人的思路還是走RT,一直瞎忙,現在剛開始看這塊,計劃動態的用libtheora渲染(感謝Google),如果誰有這方面經驗,還望不吝賜教。

 

16.關於如何製作酷炫的效果,其實Flash萬變不離其宗,所有酷炫動畫的本質就如同骨骼動畫,就是二維平面上的位移,縮放,Alpha插值漸變,再加上遮罩層,AS腳本,不停的Stop,GotoPlay...好吧,這個還是個經驗活,多看,多學最重要;

 

....

 

補充,後續:

17.開始建立關鍵幀,放入元件很重要,結束時,確保控件存在於最後一幀同樣重要,否則在一個Movie的多個Scene下跳轉,在調用SF的主體程序內同樣會遇到莫名其妙的指針丟失問題;

18.幀上的action進行變量初始化?這一點一定要防範,尤其是獨立一個控件,多次創建調用的情況下,主體程序內對指定變量的賦值與action腳本內的賦值很可能會因爲時序問題出現不可預知的情況,so,需要動態賦值的變量初始化,要麼不動,要麼寫在對應的AS類初始化函數中;

19,關於透明控件,在ScaleForm中它是仍然會接收鼠標等輸入響應!

所以,當程序遇到某塊特定區域鼠標無法點擊的怪異情況,先去檢查下,美術是不是爲了做一個漸變幀的效果,

只讓一個控件alpha變成0,而未設置inVisible了~


20,AS中並沒有C\C++中的指針概念,但是它具有一個一遇到空變量就罷工的傲嬌特性,並且不會報錯,這點非常值得警惕;

如,美工拖出一個控件,你對齊做了初始化,和addListener,然後,美術趕腳不爽,又來不及改動,把控件這層改成引導層,

然後,你一無所知,AS從此默默地在化爲引導層的空控件變量後自行跳出,

好了,Boss過來一看,原先好好的功能突然就謝特了,在錯宗複雜的腳本海洋裏去跟蹤?去看咋一眼就是對的資源?

關鍵時刻,這些都是非常痛苦的,所以,AS寫腳本多寫一行 If( != null ){ },養成嚴格習慣,會有好處的~


21,由C++向as中變量賦值時,需要變量是Public


22,Flash中使用共享字體庫鏈接,如果一個控件會引用到其中使用字體,如果中途更換了所用字體,SF有Bug會不斷地遞歸尋找字庫,會出錯甚至導致崩潰,而這種幾個庫(不同Flash文件間共享)出現的問題,統稱爲莫名其妙的Cache問題,有時候勾上自動更新也不是很好的選擇(同自動申明舞臺實例),這時候,清除組件定義常常是最直接有效的(例如:源控件正常,引入後死活有問題,就很可能是Cache造成)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章