2009-07-08 4 views
0

私は主人公がポイントを獲得するためにスクリーンにジャンプするゲームを設計しましたが、キャラクターが着陸した後にしか触れることができないようにする必要があります。逃した??アクションの問題

(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つのコメント - あなたはより良い質問のタイトルでより良い回答を得るでしょう。 「アニメーション中にユーザー入力を無効にする」 –

答えて

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