您的位置:首页 > 移动开发 > IOS开发

(NO.00001)iOS游戏SpeedBoy Lite成形记(九)

2015-10-20 18:42 351 查看
我们回到matchRun方法中去尝试第一次修改,部分代码如下:

CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration position:ccp(0.9f, 0)];

CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:duration position:ccp(0, 0) height:0.05 jumps:20];

//略去回调block中的方法...

player.speed = [CCActionSpeed actionWithAction:moveBy speed:1.0f];
CCActionSequence *seq = [CCActionSequence actionWithArray:@[player.speed,blk]];

[player runAction:seq];
[player runAction:jump];


改动并不大.主要是将移动动作放到了Speed动作中去,然后在seq中执行speed动作而已.

信心满满的编译通过,然后尝试运行…

神马,竟然出错了!提示speed动作找不到selector duration!

找到CCActionSpeed的API,发现最下方有如下一句:


Note: CCActionSpeed can not be added to a CCActionSequence because it does not inherit from CCActionFiniteTime. It can however be used to control the speed of an entire CCActionSequence.



原来ActionSpeed不能被添加到ActionSequence中去,因为其并不继承于ActionFiniteTime类.其根本原因我猜测是该类中没有duration方法,而Seq中需要该方法计算其中所有子方法经历的时间.

但是我们必须要顺序(seq)中的回调block,否则无法在选手到达终点时完成动作.

接下来是我的第二次尝试修改:

CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration position:ccp(0.9f, 0)];

CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:duration position:ccp(0, 0) height:0.05 jumps:20];

//略去回调block中的方法...

CCActionSequence *seq = [CCActionSequence actionWithArray:@[moveBy,blk]];
player.speed = [CCActionSpeed actionWithAction:seq speed:1.0];
[player runAction:player.speed];
[player runAction:jump];
[player startMatch];


编译运行,now it’s work!关键是将seq放在了speed方法中,而不是反过来.

可是这又产生一个小问题.写代码就是这样,完成了一点新的的东西,原来的又工作不正常了.没关系,这也是编程乐趣所在.下篇我们再叙 ;)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: