我设计了一个游戏,主角将在屏幕上跳跃获得积分,但我需要玩家只能在角色降落后触摸,我做了以下事情但仍然没有工作,我错过了什么?
(BOOL)ccTouchesEnded:(NSSet *)触及withEvent:(UIEvent *)事件{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView: [touch view]];
point = [[Director sharedDirector] convertCoordinate: point];
id jump = [JumpTo actionWithDuration:0.5 position:ccp(point.x,point.y) height:100 jumps:1];
[plainSprite runAction:jump];
if (![jump isDone])
{
isTouchEnabled=NO;
}
返回YES;
}
答案 0 :(得分:1)
问题是JumpTo“异步”工作(好吧,不是真的,但它会给出异步调用的外观)。以下是它的工作原理:
创建任何IntervalAction(如JumpTo)只会创建一个跟踪某些属性(如位置,不透明度等)的对象。然后游戏循环继续,定期调用该动作以更新其属性。
因此,在您的情况下,if(![jump isDone])将不起作用,因为它在创建操作后立即调用,而不是在完成后调用。
那么,如何解决问题 -
首先创建一个重新启用精灵的jumpIsDone方法。然后:
isTouchEnabled = NO;
[plainSprite runAction: [JumpTo actionWithDuration: 0.5 position:ccp(point.x, point.y) height:100 jumps:1]];
[plainSprite runAction: [Sequence actionOne: [DelayTime actionWithDuration: 0.5]
two: [CallFunc actionWithTarget: self selector: @selector(jumpIsDone)]]];