所以我正在使用平铺图像制作横向滚动游戏。在任何给定时间,至少有大约 120 幅图像正在使用此代码绘制:
for (int mapX = 0; mapX < mapWidth; mapX++)
{
for (int mapY = 0; mapY < mapHeight; mapY++)
{
try
{
Block block = mapList[mapY, mapX];
if (block == null)
continue;
if (block.nullspace)
continue;
block.Interact();
int drawX = sceneX + block.blockX;
int drawY = sceneY + block.blockY;
if (drawX + block.blockWidth < 0)
continue;
else if (drawX > this.ClientSize.Width + 50)
break;
if (drawY + block.blockHeight < 0)
continue;
else if (drawY > this.ClientSize.Height)
break;
e.Graphics.DrawImage(block.blockImage, drawX, drawY, block.blockWidth, block.blockHeight);
if (block.overlayImage != null && !block.dontDraw)
e.Graphics.DrawImage(block.overlayImage, sceneX + block.blockX, sceneY + block.blockY, block.blockWidth, block.blockHeight);
}
catch (Exception)
{
}
}
}
但是,每次需要移动图像时都会运行此代码。例如,为了让整个场景移动,我有一个间隔为 10 的计时器(为了保持移动平滑),它将递减 sceneX(因为我将场景向左移动),然后重新绘制整个场景。所以本质上,每 10 个滴答声就会重新绘制约 120 个图像。这导致我的程序在我的计算机上达到大约 40% 的 CPU 使用率。
基本上我的问题是:“绘制和移动大量图像图块的最有效方法是什么”
这是正在绘制的场景的图像: