先前看完了Sprite的结构, 再来看一下实际的Action.
所有的Action都是在IntervalAction.h里面定义的, 打开这个文件,可以看到HelloAction示例里面的几个action, 先来看一下整体结构再来逐一看他们的介绍:
每个Action都有一个共同的基类, IntervalAction,而这个IntervalAction又是继承自FiniteTimeAction, FiniteTimeAction继承自Action, Action类是顶层类, 自上而下,先来看这个Action类.
Action是所有actions的基类, 这个类包含两个属性,一个是target, 指明action是作用于谁, 另一个是tag,用于标示这个Action,这一点有些想UIView的tag. 主要的方法有start/stop/step:dt/update:time/isDone, 该类用作抽象基类. 再看FiniteTimeAction.
FiniteTimeAction, 顾名思义, 就是在Action的基础上添加了一个时间限制, 另外还提供了Action倒放(reverse)接口, 不过这个接口是个空函数,需要下面的子类来实现,所以说这个类还是个抽象类. 只是Action类的一层非常薄的包装.接下来是真正能干活的类,
IntervalAction真正定义了一个基本的Action, 包括起始/结束时间, 速度等等.它主要提供了基于时间的callback, reverse方法还是没有实现, 基本的Action不是可用的Action.
Actions里面起始还可以再分为两类,一类是真正的action比如RotateBy 比如JumpBy 这些真正做出一个动作的Action,另一类更像一个组合的概念, 把这些单一的动作组合起来,做成一个连贯的Action,比如Spawn ,比如Sequence.和Repeat.这两类动作都可以直接作为Sprite类runAction的方法传给Sprite.
有了这些了解, 再详细的看每个action就简单了.
- 首先看这个RotateBy ,注释里面说只要是XXBy的指的是相对的, XXTo的指的就是绝对的, 先不管什么意思,进去看看再说.
RotateBy就是”相对”目前的状态, 顺时针方向转多少度; 再看上面的那个RotateTo,估计就是直接转到一个绝对的度数. 两个类有着相似的用法, 都可以简单的调用一个类方法, 指定两个参数来完成相应的操作. 这回知道By和To的区别了.
- JumpBy ,actionWithDuration 依然是持续时间, 单位为秒,position 是结束的点,height 是跳其的高度,jumps 定义跳几次,至于每次跳多远是由结束点的位置和跳跃的次数计算出来的,不需要指定.比如这里吧jumps从4改为2再运行,你就会发现那个小人在跳跃的时候再也不需要脑袋着地了, 哈哈.
- Spawn ,是把几个动作揉在一起,同时做出动作,没什么好说的.
- Sequence 和Repeat 包括上面这个Spawn 都是组合类的动作,非常容易理解.
至于用Sprite的runAction 来执行这些actions, 好像有个限制是说只有sprite对象必须先显示出来然后才能执行动作,不能在没显示的情况下执行动作.
One Response
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.
Continuing the Discussion
Buy:Viagra Professional.VPXL.Viagra.Maxaman.Cialis Super Active+.Super Active ED Pack.Cialis.Propecia.Cialis Professional.Cialis Soft Tabs.Tramadol.Soma.Zithromax.Viagra Super Force.Viagra Super Active+.Levitra.Viagra Soft Tabs….