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.
組件化非??傄?#xff0c;合理地抽出通用組件,會讓工作效率、程序效率事半功倍;
?
?
?
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造成)
?
轉載于:https://www.cnblogs.com/Zephyroal/archive/2012/08/26/2657293.html
總結
以上是生活随笔為你收集整理的ScaleForm十六戒言的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 开始新的blog之旅--flash3,0
- 下一篇: android系统框架()
