[PSP ] CXMB教學(8):XML之動畫制御

看板Modchip作者 (魔物を討つ者)時間14年前 (2011/07/27 22:38), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/1
前言: 許多人等的應該是這一篇 不過前面的概念沒有學好的話,動畫製作會非常辛苦 尤其是座標體系的部分,如果有不熟的地方請翻回去複習 此外需注意,此篇的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,如果修正得當就可以解決 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.150.190

07/28 00:32, , 1F
等等,那個夏日方案是怎樣wwww
07/28 00:32, 1F

07/28 00:38, , 2F
永久機639可按住home開機、620按select
07/28 00:38, 2F

07/28 08:43, , 3F
原來如此,關於CFW還是得問樓上
07/28 08:43, 3F

07/28 08:47, , 4F
這麼說來風險似乎又降低了(茶
07/28 08:47, 4F
※ 編輯: KawasumiMai 來自: 61.62.201.88 (07/29 19:10) ※ 編輯: KawasumiMai 來自: 61.62.201.88 (07/29 19:16)
文章代碼(AID): #1EC2BWuI (Modchip)