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