2

cocos2dで、cclayerがopenglを介して描画する頻度をすべてのフレームよりも少なくする方法はありますか? 私が試してみました:

-(void) draw
{
     glEnable(GL_LINE_SMOOTH);
     if (iShouldUpdate) {
         ccDrawLine(ccp(50,50), ccp(200,200));   
         iShouldUpdate = false;
     }
}

-(void) updateTheMap
{
     iShouldUpdate = true;
}

必要に応じて updateTheMap を呼び出しますが、1 フレームだけ表示されます。

ありがとう。

4

1 に答える 1

1

はいといいえ。

通常、フレームの内容は、新しいフレームがレンダリングされる前にクリアされます。すべてのフレームはクリーンな状態から始まります。画面のクリアを無効にすると、何かを一度描画すると画面に残ります。しかし、そうすると、描いた部分だけを正確にクリアしないと、描いたものを動かすことができません。

これは非常に複雑になり、すぐにエラーが発生しやすくなるため、新しいフレームの描画を開始する前にフレームの内容をクリアするゲーム エンジンが登場して以来、ゲームの標準的な方法が採用されてきました。注目すべき例外の 1 つは DooM です。エンジン開発者は、画面上のすべてのピクセルがフレームごとに更新されると想定していまし。フレームごとにフレームバッファをクリアしない:

ここに画像の説明を入力

したがって、フレームごとに画面全体のコンテンツを再度描画するのが標準です。そのため、数フレームごとに何かを描画することはできません。そうすると、描画したものが 1 フレームだけ画面に表示されてから消えてしまいます。

要約すると、フレームごとに繰り返し画面に表示する必要があるすべてのものを描画する必要があります。これは、ほとんどすべてのゲーム エンジンが動作する方法です。

于 2012-06-13T13:49:48.753 に答える