欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/9/20 编程问答 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 (NO.00001)iOS游戏SpeedBoy Lite成形记(十) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

上篇最后遇到是神马问题呢?

原来由于现在seq动作的时间变得不确定了,jump的持续时间不能对应发生变化,导致可能选手在比赛后边就没有跳跃动作了!这虽不影响整个代码逻辑,却多少有些让玩家不爽.

一种解决办法就是,将jump动作设置为永久重复动作,然后在回调block中将其关闭即可.因为Obj-C中的block是闭包(不太清楚闭包的童鞋请自行度娘),所以在block中引用外面的jump都不是个事儿.

下面是完整的matchRun方法的实现:

-(void)matchRun{CCLOG(@"%@ invoke!",NSStringFromSelector(_cmd));if (_matching) {return;}[self matchReset];_matching = YES;for (Player *player in _players) {CCTime duration = (CCRANDOM_0_1() * 500.0/100) + 5.0;CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration position:ccp(0.9f, 0)];CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:duration position:ccp(0, 0) height:0.05 jumps:20];CCActionRepeatForever *repeat = [CCActionRepeatForever actionWithAction:jump];CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{_finishedCount++;[player endMatch];[player stopAction:repeat];if (_finishedCount == 1) {_bestElapsedTime = player.elapsedTime;}CCLabelTTF* label = (CCLabelTTF*)_labelArray[player.playerNumber-1];NSTimeInterval intervalOffset = player.elapsedTime - _bestElapsedTime;if (intervalOffset > 0) {label.string = [NSString stringWithFormat:@"NO.%d +%.4f s",_finishedCount,intervalOffset];}else{label.string = [NSString stringWithFormat:@"NO.%d %.4f s",_finishedCount,player.elapsedTime];}label.visible = YES;if (_finishedCount == PlayerCount) {_finishedCount = 0;_matching = NO;}}];CCActionSequence *seq = [CCActionSequence actionWithArray:@[moveBy,blk]];player.speed = [CCActionSpeed actionWithAction:seq speed:1.0];[player runAction:player.speed];[player runAction:repeat];[player startMatch];} }

总结

以上是生活随笔为你收集整理的(NO.00001)iOS游戏SpeedBoy Lite成形记(十)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。