搜索
您的当前位置:首页正文

SpriteKit学习笔记04-复合动作

来源:哗拓教育
图片来源于网络

这一篇准备介绍SKAction的最后一个部分,即多种动作的复合。

首先介绍队列动作Sequence,这个动作可以用队列收录一系列的SKAction,然后按照队列的顺序播放,代码如下

case9:{//对应按键V

SKAction *A1 = [SKAction moveByX:100y:0duration:0.5];

SKAction *A2 = [SKAction moveByX:0y:100duration:0.5];

SKAction *A3 = [SKAction moveByX:-100y:0duration:0.5];

SKAction *A4 = [SKAction moveByX:0y:-100duration:0.5];

SKAction *around = [SKAction sequence:@[A1,A2,A3,A4]];

[node runAction:around];

}

在上一篇的keydown方法的switch判断中添加如下分支,运行,会发现四个动画被依次执行,完成了一次逆时针的正方形路径。如果你在动画没执行完的时候再次按下V键,会发现两个动画被同时执行,比如在一开始快速点击两次V,会让火箭运行一个边长200的正方形,因为每一个移动动画都被同时执行了两次,所以移动距离翻倍了。

这次换成了上一篇预约要介绍的resize系列方法

case 11:{ //对应按键B

SKAction *A1 = [SKAction resizeToWidth:100 duration:1.0];

SKAction *A2 = [SKAction resizeToHeight:100 duration:1.0];

SKAction *A3 = [SKAction resizeByWidth:200 height:200 duration:1.0];

//A3动画应该是原始尺寸32+A1A2缩放100+A3缩放200=长宽332,下一个动画会反而缩小

SKAction *A4 = [SKAction resizeToWidth:200 height:200 duration:1.0];

SKAction *sequence = [SKAction sequence:@[A1,A2,A3,A4]];

[node runAction:sequence];

break;

}

可以看到重设尺寸动画resize的运行,与上一篇推测的没有差错。scale缩放不另行介绍了,套路都一样,都是玩代码的,我相信你们的水平

图片来源于网络

接下来介绍group动画,group动画的参数也是一个队列,与sequence动画的区别是,group动画中的各个动画是同时执行的。由于同时执行缩小与放大会毫无反应,所以scale等一下在说。

代码如下

case 45:{//对应按键N

SKAction *a1 = [SKAction moveToX:100 duration:2.0];

SKAction *a2 = [SKAction moveToY:100 duration:2.0];

SKAction *move = [SKAction sequence:@[a1,a2]];

SKAction *B1 = [SKAction fadeOutWithDuration:1.0];

SKAction *B2 = [SKAction fadeInWithDuration:1.0];

SKAction *flash = [SKAction sequence:@[B1,B2]];

SKAction *group = [SKAction group:@[move,flash]];

[noderunAction:group];

break;

}

这里我们向group内添加了两个sequence,借此说明,group,sequence,repeat三个组合动画是可以任意相互嵌套的,通过他们的组合我们可以实现很多相对复杂的效果。

添加的两个队列一个是移动动画,耗时合计4s,另一个是淡入淡出动画,合计耗时2s,效果如图

group动画示意

可以看到,闪烁和移动动画同时开始执行,但是因为时间设置的原因,并不会同时结束,这一点有时候需要注意。

然后是repeat重复动画,这个比较简单,两个方法,一个是重复指定的次数,另一个是永久重复,永久重复可被removeAllAction方法移除,看需要取用,代码如下

case 46:{//对应按键M

SKAction *A1 = [SKAction fadeOutWithDuration:1.0];

SKAction *A2 = [SKAction fadeInWithDuration:1.0];

SKAction*A3 = [SKAction fadeAlphaTo:0.0duration:1.0];

SKAction *flashforever = [SKAction repeatActionForever:flash];

//SKAction *flash5 = [SKAction repeatAction:flash count:5];

//闪无限还是闪五次自己看着改

[node runAction:flashforever];

break;

}

SKAction的基本动作介绍就到这里了。后面会尝试物理模拟,敬请期待。

Top