0

ねえ、私はいくつかのアセンブリとCを使用してプリミティブ型のボードをプログラミングしています。ボードは、古い学校の黒と白のゲームボーイの親族だと考えてください。

ゲームを書いているときに、バックバッファーがないという問題が発生しています。画面をクリアすると、画面に直接描画されるため、画面は本当にクリアされます。次のパスですぐにクリアされるため、描画したものはすべて非表示になります。したがって、描画された画面を新しい描画された画面に置き換える代わりに、画面をクリアしてから描画します。

レンダリングを1秒あたり10フレームに制限するというハックな解決策を思いつきました。これを行う方法は、画面をクリアし、図形を描画してから、ループを1/10秒の長さで焼き付けることです。このようにして、描画されたものはすべてそこに長く留まり、より長く表示されるため、ユーザーはすぐに消去される前にそれを見ることができます。すなわち

while (1)
{
    doRender = 1;
    screen_clear();
    draw_circle(x,y,20,1);
    while(doRender)
    {
                // a interrupt will set doRender to 0, thus ending the loop
    }
}

これで動作します!! ある種、それはちらつきを作成し、恐ろしいものではありませんが、確かに目立ちます。私のゲームは信じられないほどのフレームレートを必要としません、10/秒で十分です。

誰かが私の問題に対するより良い解決策を持っていますか?

4

2 に答える 2

1

あなたの解決策は良いです。円が描かれた領域だけをクリアして、最適化してみてください。

于 2012-12-02T08:15:26.390 に答える
1

XORレンダリングを使用することもできます。例:スプライトを画面にXORしてレンダリングし、次のフレームで同じ場所でもう一度XORして削除し、新しい場所でXORします。

vsyncを待つことができますか?描画が十分に速い場合は、垂直帰線区間の間に描画を実行して、残っているちらつきを取り除くことができる場合があります。

于 2012-12-02T11:22:16.953 に答える