c++ - 1つの画面で2つのバッファをどのように使用できますか?出来ますか ? (Allegro.h)

原文 c++ c allegro

私はMicrosoft Visual Studio 2010に取り組んでおり、Allegro.hライブラリを使用してゲームをコーディングしようとしています。

ポイントは


私はdraw_sprite(screen、buf1,0,0);で建物に描画するためにバッファを使用しています。
その後、その画面でビットマップボールイメージを移動します
.bmp画像を移動すると、buf1(同じバッファー)を再び使用しますが、動画を作成するにはbuf1をクリーンアップする必要があります
私がこれを自然に行うと、バッファ内のすべてのものを逃しますが、ゲーム中は建物の背景が必要です。
1つの画面で2つのバッファをどのように使用できますか?


これは私のコードです:

void  BinaCizdir1(BITMAP *buf1){
    int r;
    int renk;
    int say=0;
    BITMAP *turuncu_beton=load_bitmap("turuncu.bmp",NULL);
    BITMAP *sari_beton=load_bitmap("sari.bmp",NULL);
    BITMAP *pembe_beton=load_bitmap("pink.bmp",NULL);
    BITMAP *oyunu1_resmi=load_bitmap("topbu.bmp",NULL);

    //Birinci oyuncunun x koordinatını belirledik.Random olarak!
    int oyuncu1_y_koor=0;

    int oyuncu1_x_koor1= (1+rand()%4);
    if (oyuncu1_x_koor1==1){
        oyuncu1_x_koor1=30;
    }
    if (oyuncu1_x_koor1==2){
        oyuncu1_x_koor1=150;
    }if (oyuncu1_x_koor1==3){
        oyuncu1_x_koor1=270;
    }if (oyuncu1_x_koor1==4){
        oyuncu1_x_koor1=390;
    }


    if(kontrol==0){
        renk=(rand()%3);r= (1+rand()%6)*30;
        for(int x=0;x<1080;x=x+30){
            for(int y=600;y>450-r;y=y-30){
                if(oyuncu1_x_koor1==x){
                    oyuncu1_y_koor=390-r;
                    draw_sprite(buf1,oyunu1_resmi,oyuncu1_x_koor1,oyuncu1_y_koor);
                }
                if(renk==0){
                    draw_sprite(buf1,turuncu_beton,x,y);
                }
                if(renk==1){
                    draw_sprite(buf1,sari_beton,x,y);
                }
                if(renk==2){
                    draw_sprite(buf1,pembe_beton,x,y);
                }
            }
            if( say%3==2 && x!=1020){
                renk=(rand()%3);
                r= (1+rand()%6)*30;
                x=x+30;
            }
            say++;
            /*
           velocityY = velocityY +acc*dt; // updating the y component of the velocity  
           x = x + (velocityX*dt); // updating the x position  
           y = y + (velocityY*dt) + 0.5*acc*(dt*dt);// updating the y position. 
           rest(5);       
           draw_sprite(buf1,oyunu1_resmi,x,y);
          */
        }
         kontrol=1;
    }
    draw_sprite(screen,buf1,0,0);
}


これは私の動くbmp画像コードです:

  velocityY = velocityY +acc*dt; // updating the y component of the velocity  
  x = x + (velocityX*dt); // updating the x position  
  y = y + (velocityY*dt) + 0.5*acc*(dt*dt);// updating the y position. 
  rest(5);       
  draw_sprite(buf1,oyunu1_resmi,x,y);
答え
申し訳ありませんが、私は声明をよく理解していません。ダブルバッファリングについて質問しているようです。

建物をオフスクリーンフレームバッファーに描画します。
次に、オフスクリーンフレームバッファーにボールを描画します。
次に、画面の垂直方向の更新を待ちます。 (このステップはおそらくAllegroによって最近自動的に行われます)
次に、バッファをスワップして、オフスクリーンフレームバッファがオンスクリーンになるようにします。
(繰り返す)

Cf. https://wiki.allegro.cc/index.php?title=Double_buffering
関連記事

c++ - プラグインと基本クラスのコンストラクター

c++ - Boost Testクラスへのアクセスの取得-test_resultsおよびresults_collector

c++ - ダイアログベースのMFCプロジェクトでカスタムコントロールを作成する方法(Visual Studio 2012)

c++ - Valgrindが32ビットのバイナリで動作しない

c++ - Clang 3.5.0 std::wregexコンパイルエラー

c++ - OpenCVでのC++メモリのカウント

c++ - 文字を置き換えると、もう1文字追加されます

javascript - c++ node.js拡張からのJavaScript関数の呼び出し

c++ - グーグルモックを使用して変換演算子int()をモックする

c++ - LAPACKによる線形方程式の解に1つの要素がありません