1

スケジュールされた更新またはtickメソッド中にイベント(void)をトリガーしたいというこの問題が発生し続けますが、トリガーするのは1回だけです。問題は、update / tickが呼び出されるたびに(各フレームで)トリガーされることです。呼び出されているメソッドによっては、ゲームの速度が低下し、クラッシュすることがあります(たとえば、addChildはすでに追加されています)。この状況を処理するために以前にBOOL(例:eventTriggered)を使用しましたが、それが唯一の、および/または最良の方法であるかどうか疑問に思っていますか?

4

1 に答える 1

1

cocos2d 2.0を使用している場合は、次を使用してください。

[self scheduleOnce:@selector(yourMethod:) delay:3.0f];

他のすべての場合は、スケジュールされたセレクターのスケジュールを解除するだけです。

-(void) yourScheduledMethodThatShouldOnlyRunOnce:(ccTime)delta
{
    [self unschedule:_cmd];

    // do stuff once
}

カスタムメソッドの場合は、メソッド呼び出しを起動する条件を設定する必要があります。次に例を示します。

-(void) update:(ccTime)delta
{
    if (runThisNowButOnlyOnce)
    {
        runThisNowButOnlyOnce = NO;
        [self runThisNowButOnlyOnceMethod];
    }
}

runThisNowButOnlyOnceをYESに設定するタイミングと場所を把握する必要があります。また、@interfaceにivarとして追加することを忘れないでください。

于 2013-02-20T19:23:04.463 に答える