行动问题

时间:2009-07-08 07:21:19

标签: iphone cocos2d-iphone

我设计了一个游戏,主角将在屏幕上跳跃获得积分,但我需要玩家只能在角色降落后触摸,我做了以下事情但仍然没有工作,我错过了什么?

(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;

}

1 个答案:

答案 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)]]];