几个月前,当我制作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);
}
}
但在应用此算法循环整个背景后,我发现整个游戏变慢了。
这个算法有用吗还是有更好的循环背景算法?
任何代码段都会受到高度赞赏 感谢。
答案 0 :(得分:1)
根据所使用的语言,此方法很容易导致您注意到的性能下降。我建议使用背景图像的绘制偏移,而不是尝试更改原始像素数据本身。
首先,使背景图像比游戏的视口更宽。在每个更新周期中,将图像移动x个像素(x取决于您想要描绘的移动速度)。
另外,我们假设您将BG移动到左侧。当您继续向左移动时,图像的右边缘将进入视口,您会注意到从视口右边缘扩展的黑色条带。为了防止这种伪影,您需要并排绘制两个背景图像。
此外,为了使所有内容看起来无缝,你必须明显地设计BG图像来平铺。正如您所料,此方法将比现有代码段快得多。