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 に答える