0

チェッカーに似た 2 プレーヤー iOS ゲームに取り組んでいます。このゲームの作成にはcocos2dを使用しています。

思考時間をシミュレートするために、プレーヤーの動きがレンダリングされてからコンピューターの動きがレンダリングされるまでの間に 0.5 秒の思考時間が必要です。

ゲームの流れは NSNotification イベントを使用して制御され、次のようになります...

プレイヤー (コンピューターまたは人間) が移動を送信 -> ボードが新しいスプライトを追加 -> ゲーム コントローラーが現在のプレイヤーを更新し、移動を送信するように要求します。

usleep(500000) をボード更新の最後かゲーム更新の最初に追加してみました。最終的に起こるのは、ボードの更新で追加されたスプライトです。人間のプレーヤーの場合、コンピューターのプレーヤーが自分の動きを送信するまで表示されません。したがって、ゲームは 500 ミリ秒待機してから、両方の動きで更新されます。

CCLayer が usleep の前にその子スプライトを強制的に更新する方法はありますか、それともこの思考時間を追加するためのより良い方法はありますか?

ありがとう

4

1 に答える 1

1

コントローラーで更新を受信するようにスケジュールすると、 update:(ccTime)dt 関数で時間がずれてしまう可能性があります。

あなたの.hで

float _slipTime;

あなたの.mで

// with other declaratives

static float THINK_TIME=.5f;


// last line before the stall


_slipTime=0.f; 
[self schedule:@selector(pauseForThink:)];


-(void) pauseForThink:(ccTime) dt {
    _slipTime+=dt;
    if(_slipTime>THINK_TIME) {
        [self unschedule:@selector(pauseForThink:)];
        // trigger here whatever you wanted to accomplish after
        // the think pause.
    }
 }

わかりました、これは簡単ですが、メイン ループがブロックされるのを防ぎます (これは睡眠で起こることです)。60 FPS で実行すると、pauseForThink メソッドが約 30 回呼び出され、cocos は一時停止中に 30 回の描画サイクルを実行します。

于 2012-11-27T01:59:40.627 に答える