0

数ヶ月前、2D背景スクロールゲームを作成していたとき、ゲームのキャラクターが動いているように見えるように背景ループを作成する必要があったので、次のアルゴリズムを使用して背景をループしました->

    int w=backgroundImage.getWidth();
     int h=backgroundImage.getHeight();
     int desX,desY;

     for(int x=0;x<w;x++)
     {
         for(int y=0;y<h;y++)
         {
             int px=backgroundImage.getRGB(x, y);

             desX=x-2;
             desY=y;


             if(desX<0)
             {
                 desX=w+desX-1;

             }

             backgroundImage.setRGB(desX, desY, px);
         }



     }

しかし、このアルゴリズムを適用してバックグラウンド全体をループさせた後、ゲーム全体が遅くなっていることがわかりました。

このアルゴリズムは良いですか、それともバックグラウンドをループするためのより良いアルゴリズムがありますか?

コードスニペットをいただければ幸いです。
ありがとう。

4

1 に答える 1

1

使用する言語によっては、この方法によって、気付いているパフォーマンスが簡単に低下する可能性があります。生のピクセルデータ自体を変更するのではなく、背景画像の描画オフセットを使用することをお勧めします。

まず、背景画像をゲームのビューポートよりも広くします。各更新サイクル中に、画像をxピクセルずつ移動します(xは、描写する移動速度によって異なります)。

また、BGを左に移動するとします。左に移動し続けると、画像の右端がビューポートに入り、ビューポートの右端から黒い帯が広がっていることに気付くでしょう。このアーティファクトを防ぐには、2つの背景画像を並べて描画する必要があります。

また、すべてをシームレスに見せるためには、明らかにBG画像をデザインしてそのように並べて表示する必要があります。ご想像のとおり、このメソッドは既存のスニペットよりもはるかに高速です。

于 2013-01-11T16:46:15.953 に答える