CXMB教學(8):XML之動畫制御 - 改機
By Franklin
at 2011-07-27T22:38
at 2011-07-27T22:38
Table of Contents
前言:
許多人等的應該是這一篇
不過前面的概念沒有學好的話,動畫製作會非常辛苦
尤其是座標體系的部分,如果有不熟的地方請翻回去複習
此外需注意,此篇的Delay值部分非常重要
所需軟體:
1.RCOMage
2.PSPad
動畫事件:
控制動畫的事件大致分為三種:
1.動態事件:宣告動畫的動作事件,可同時進行
每個事件有屬於自己的事件長度(duration)
2.結束事件:宣告結尾之後自動執行的動畫,結尾時宣告一次
可省略,決定是否自動進行下一個步驟
結束事件一宣告即為結尾,以下的事件一率略過
3.Delay事件:宣告動畫時間差的事件,有屬於自己的事件長度(time)
當time不為0時以Delay事件長度(time)為優先
當time為0時以動態事件長度(dutation)為優先
有關時間數值的部分,個人使用上感覺120約為一般60fps(1/60s)的長度
動畫流程:
每個動畫的流程可以想成是一條影片時間軸
時間軸上不同位置有不同的事件,時間點經過就會發生
一個<Animation>標籤代表的是一個動畫
<Animation>標籤內的敘述則是該動畫會發生的所有事件順序
1.基本型態:
│動態事件1(duration=2000) │動態事件2(duration=2000) │
│ │ │
│←- Delay(time=1000) -→│←- Delay(time=3000) -→│
<Animation>
動態事件1
Delay(time=1000)
動態事件2
Delay(time=3000)
</Animation>
動態事件與Delay值輪流宣告
動畫順序為「動態事件1→動態事件2→停止」
當Delay的time值大於等於前述事件的duration值時,動畫會播放並緩衝
反之當Delay的time值小於(不等於0)duraton值時,動畫會中斷並跳過
以此範例為例:
動態事件1經過1000時間之後會被中斷,接著執行動態事件2
動態事件2經過2000時間之後完成,並多出了1000時間的緩衝
2.同時型態:
│動態事件1(duration=2000) │
│動態事件2(duration=3000) │
│←- Delay(time=0) -→│
<Animation>
動態事件1
動態事件2
Delay(time=0)
</Animation>
同時宣告複數個動態事件後宣告Delay值
動畫順序為「動態事件1&2→停止」
當Delay的time值等於0時,以前述動態事件的duration最大值為參考
以此範例為例
動態事件1和動態事件2同時發生
動態事件1以2000時間完成,動態時間2以3000時間完成
動態事件2結束之後馬上停止,沒有緩衝時間
3.迴圈型態:
│動態事件1(duration=2000) │ │
│動態事件2(duration=3000) │結束事件│
│←- Delay(time=4000) -→│ │
<Animation>
動態事件1
動態事件2
Delay(time=4000)
結束事件
(動態事件3)
</Animation>
宣告事件與Delay值之後加入結束事件
動畫順序為「動態事件1&2→經過1000時間→動態事件1&2→...」
結束事件之後宣告的事件一率略過不執行
以此範例為例
動態事件1和動態事件2同時發生
動態事件1以2000時間完成,動態時間2以3000時間完成
動態事件2結束之後,經過1000時間緩衝,重複動態事件1和動態事件2
動態事件:
影響動畫最主要的就是動態事件,種類大致分為以下幾種:
1.MoveTo:移動物件的方法
x,y屬性設定移動的絕對位置(相對於母物件)
2.Rotate:旋轉物件的方法
x,y,z屬性設定不同軸向旋轉的角度
採用徑度,2π(約6.283185307)為一圈
其中正向角度的定義
x軸為右方視點逆時針,y軸為上方視點逆時針,z軸為前方視點逆時針
3.Recolour:變色物件的方法
red,blue,green屬性設定RGB彩度,alpha屬性定義透明度
4.Resize:縮放物件的方法
width,height屬性設定物件寬度"比例"與高度"比例"
結束事件:
結束事件需填上目標動畫名稱,於結尾時執行該動畫一次
<FireEvent object="anim:動畫名稱" />
此行之後宣告的任何事件將一律略過,不會因為執行完目標動畫回來接著完成
可以省略,動畫結束後將直接停止,沒有任何動作
結束事件的用法大致分為以下兩種:
1.迴圈動畫:
<Animation name="anime_01">
動態事件1
動態事件2
Delay(time=4000)
<FireEvent object="anim:anime_01" />
</Animation>
此時anime_01的內容將持續下去
2.先置動畫:
<Animation name="anime_01">
動態事件1
動態事件2
Delay(time=4000)
<FireEvent object="anim:anime_02" />
</Animation>
<Animation name="anime_02">
動態事件3
Delay(time=1000)
<FireEvent object="anim:anime_02" />
</Animation>
此時anime_01執行完畢後,自動進入anime_02的迴圈
Delay事件:
Delay事件的內容非常簡單,就只有宣告time值而已
值得注意的是Delay事件與結束事件的關係
由於結束事件的優先度與動態事件相同
因此當有宣告結束事件時,結束事件前的Delay值不可省略
「否 則 將 進 入 無 窮 迴 圈」
就永久機的定義,這幾乎是造成磚化的主因
(尤其是當問題出現在進入CXMB並可連接USB前)
以下舉個例子分析:
<Animation name="anime_01">
動態事件1
動態事件2
</Animation>
以上面的寫法來說,同時執行完動態事件1跟動態事件2,動畫就停止了
因此結尾的Delay值可省略,動畫長度為兩個事件中較大的duration值
<Animation name="anime_01">
動態事件1
動態事件2
Delay(time=4000)
<FireEvent object="anim:anime_01" />
</Animation>
加入了Delay值與結束事件之後
同時執行動態事件1與動態事件2,並視Delay值決定進入結束事件的時間
並且重複執行anime_01
<Animation name="anime_01">
動態事件1
動態事件2
<FireEvent object="anim:anime_01" />
</Animation>
在有宣告結束事件時把Delay值拿掉,此時會發生一個問題
動態事件1,動態事件2,結束事件,這三者是同時執行的
換句話說不會經過動態事件1或2的duration之後才進入迴圈
而是動畫一開始就馬上重複,這將造成動畫極度的忙碌,造成系統死機(Freeze)
1.如果這問題出現在某個主選單以外的功能表,也許可以強制關機
重開之後進入USB傳輸將CTF修正,並Reset VSH解決
2.如果這問題出現在開機動畫,或是進入CXMB的淡出之前
2-1.非永久機的使用者,強制關機重開之後,進入OFW的USB傳輸
使用CTFtool將修正後的CTF傳輸取代,並重新進入CFW
重開之後由於自動使用預設(且修正後)的CTF,如果修正得當就可以解決
2-2.永久機的使用者,強制關機重開之後
按住Home(639)或Select(620)或R鍵開機,進入OFW的USB傳輸
使用CTFtool將修正後的CTF傳輸取代,並重新進入CFW
重開之後由於自動使用預設(且修正後)的CTF,如果修正得當就可以解決
--
Tags:
改機
All Comments
By Skylar Davis
at 2011-07-29T11:49
at 2011-07-29T11:49
By Joe
at 2011-07-30T08:14
at 2011-07-30T08:14
By Elma
at 2011-08-03T09:57
at 2011-08-03T09:57
By Linda
at 2011-08-05T22:25
at 2011-08-05T22:25
Related Posts
目前版本是6.35Pro-B3 想請問幾個問題
By Sierra Rose
at 2011-07-27T14:47
at 2011-07-27T14:47
降級問題
By Kumar
at 2011-07-27T12:24
at 2011-07-27T12:24
想把6.35Pro改成6.39
By Frederica
at 2011-07-26T17:00
at 2011-07-26T17:00
CXMB教學(7):XML之Object修改
By Elma
at 2011-07-26T09:56
at 2011-07-26T09:56
CXMB教學(6):XML之座標體系概念
By Suhail Hany
at 2011-07-25T20:11
at 2011-07-25T20:11