2012-05-12 24 views
1

ループに1秒未満の遅延を追加する方法はありますか(A forループなど)。すなわち、私は各反復後に短い遅延を望む。ループ内に遅延を追加する

私は、cocos2dを使用すると、遅延を伴うセレクタをスケジュールできることを知っています。しかし、私はこのことがどのようにこのケースで使用されるのかはわかりません。

私はまた、睡眠にはコストがかかり、お勧めできないことも知っています。

提案がありますか?

+0

メイン(UI)スレッドでこの遅延を実行していないとうまくいけば、あなたのユーザーはこれに気づき、あなたに満足していないはずです。 –

+0

私はよく分かりませんが、ここでは 'sleep()'が役に立ちます。 – SmartTree

答えて

0

あなたはCのスリープ機能を使用することができます。

sleep(seconds); 

しかし、あなたはまた、UITimerを見て、または可能性ブロックベースperformSelector:withObject:afterDelay:方法があります。

はよりNSObjectのベースの方法でこれを参照してください:あなたはcocos2dでNSTimersを使うべきではありませんhttps://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay

+0

私は、すべての処理を一括して停止するため、スリープは正しいアプローチであるとは確信していません。私はまだアプリが他のことをやりたいと思っています。 – plawres

+0

おそらく、私はそのメソッドを再帰的に遅れて呼び出すことができます。 – plawres

+0

現在のメソッドを一時停止させる方法はありませんが、一時停止中に他のスケジュールされたタスクを処理していますか? – plawres

2

。ゲームを一時停止する可能性がある場合は、問題を引き起こします。

反復の間に一定の遅延を持つループを作成したい場合は、必要な遅延を持つscedule:interval:メソッドを自由に使用できます。

[self schedule:@selector(methodToScedule) interval:yourDelay] 

ランダム遅延を行う必要がある場合は、cocos2dアクションのシーケンスを使用することができます。たとえば、

- (void) sceduleMethod 
{ 
    // do anything you want 

    ccTime randomDuration = // make your random duration 
    id delayAction = [CCDelayTime actionWithDuration: randomDuration]; 
    id callbackAction = [CCCallFunc actionWithTarget:self selector:@selector(scheduleMethod)]; 
    id sequence = [CCSequenece actionOne: delayAction actionTwo: callbackAction]; 
    [self runAction: sequence]; 
} 

この場合、メソッドを1回呼び出す必要があります。それからそれは与えられた遅れでそれ自身を呼ぶでしょう。

+0

ありがとうございました – plawres

関連する問題