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 向左移动。当您继续向左移动时,图像的右边缘将进入视口,您会注意到从视口的右边缘扩展的黑色条带。为了防止这种伪影,您需要并排绘制两个背景图像。

此外,为了让这一切看起来无缝,您显然必须设计为 BG 图像以这种方式平铺。正如您所料,此方法将比现有代码段快得多。

于 2013-01-11T16:46:15.953 回答