游戏背景滚动/循环算法

时间:2012-12-28 15:47:45

标签: 2d-games

几个月前,当我制作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);
         }



     }

但在应用此算法循环整个背景后,我发现整个游戏变慢了。

这个算法有用吗还是有更好的循环背景算法?

任何代码段都会受到高度赞赏 感谢。

1 个答案:

答案 0 :(得分:1)

根据所使用的语言,此方法很容易导致您注意到的性能下降。我建议使用背景图像的绘制偏移,而不是尝试更改原始像素数据本身。

首先,使背景图像比游戏的视口更宽。在每个更新周期中,将图像移动x个像素(x取决于您想要描绘的移动速度)。

另外,我们假设您将BG移动到左侧。当您继续向左移动时,图像的右边缘将进入视口,您会注意到从视口右边缘扩展的黑色条带。为了防止这种伪影,您需要并排绘制两个背景图像。

此外,为了使所有内容看起来无缝,你必须明显地设计BG图像来平铺。正如您所料,此方法将比现有代码段快得多。