ゲームを開発して、NSTimerの小さな問題に挑戦しています。スプライトがフェードアウトする前にシーン内である程度の時間が経過しているように見えます。NSTimerはすぐに発砲する
double CALC_TIME = 5;
[NSTimer scheduledTimerWithTimeInterval:CALC_TIME target:self selector:@selector(hideSprite) userInfo:nil repeats:NO];
hideSpriteは5秒後に呼び出されますが、代わりに即座に呼び出されます(または近い瞬間)。
可能な解決策:私は繰り返すタイマーをセットして、フェージングが行われている次のインターバルを最初に設定され、ブールfirstCallを持つことによってこれを行うことができます知っている 、タイマーは無効けどさあなたの助けのための
bool firstCall = false;
-(void)hideSprite{
if(!firstCall){
firstCall = true
}else{
//fade out sprite
//Invalidate NSTimer
//firstCall = false;
}
}
ありがとう:これはこのような良い習慣
ではないと思います!
これは動作するはずです。他の何かが間違っています - あなたは 'hideSprite'が他のコードから呼び出されていないのでしょうか?いくつかのテストコードのように、タイマーが設定された直後にまだ残っていますか? –
いいえ、私はちょうどそこにチェックしました、方法は1つの場所からのみ呼び出されます 私はメソッドを初期化した直後にNSLogを追加しました。 _2011-12-19 21:43:11.547スキッシュエム[14144:10a03]:43:11.562スキッシュエムタイマ 2011-12-19 21呼び出さ[14144を:10a03]呼び出さタイマ 出力を保持します2011-12-19 21:43:16.582 Squish Em [14144:10a03]タイマーが呼び出されました 2011-12-19 21:43:16.596 Squish Em [14144:10a03] Timer_ – Rich