0

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

(BOOL)ccTouchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {

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

返回是;

}

4

1 回答 1

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)]]];
于 2009-09-23T12:19:34.473 回答