作者KawasumiMai (魔物を讨つ者)
看板Modchip
标题[PSP ] CXMB教学(8):XML之动画制御
时间Wed Jul 27 22:38:20 2011
前言:
许多人等的应该是这一篇
不过前面的概念没有学好的话,动画制作会非常辛苦
尤其是座标体系的部分,如果有不熟的地方请翻回去复习
此外需注意,此篇的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
1F:推 leemiyinghao:等等,那个夏日方案是怎样wwww 114.36.140.245 07/28 00:32
2F:→ satou20444:永久机639可按住home开机、620按select 114.38.225.15 07/28 00:38
3F:→ KawasumiMai:原来如此,关於CFW还是得问楼上 61.62.94.195 07/28 08:43
4F:→ KawasumiMai:这麽说来风险似乎又降低了(茶 61.62.94.195 07/28 08:47
※ 编辑: KawasumiMai 来自: 61.62.201.88 (07/29 19:10)
※ 编辑: KawasumiMai 来自: 61.62.201.88 (07/29 19:16)