http://xnaresources.com/default.asp?page=Tutorial:TileEngineSeries:1
该链接提供的教程涵盖了创建磁贴引擎所需的大部分内容。
看起来您正在应用程序初始化函数中创建图块。您最好创建某种磁贴管理器来存储您需要的所有磁贴。
就创建图块而言,您可以使用结构数组或数组结构。对于第一个,您将创建一个 Tile 类,该类将至少存储图块的位置。如果使用 spritesheet 来渲染图块,您还可以包含一个 TileID 来确定应该使用哪个图块来绘制。
对于数组结构,您可以存储将用于图块的向量数组(在图块管理器内),以及另一个 TileID 数组。两种方法都有效。我可能会向您推荐第一个,但为了便于阅读和练习面向对象编程。
Texture2D 也应该只加载一次。您没有发布加载位置或计划如何制作更多图块,因此我假设您的计划是为每个图块加载纹理 2D,这将是一个坏主意。
最后,在循环方面,一旦创建了 tile 类,您的 tile 管理器或初始化函数将循环创建并设置每个 tile 的位置(伪代码):
int tileRowCount = mapSizeX / tileSizeX;
int tileColumnCount = mapSizeY / tileSizeY;
for(int rowIndex = 0; rowIndex < tileRowCount; rowIndex++)
{
for(int columnIndex = 0; columnIndex < tileColumnCount; columnIndex++)
{
tileList.Add(new Tile(new Vector2(columnIndex * tileSizeX, rowIndex * tileSizeY);
}
}
然后画图:
foreach(Tile tile in tileList)
{
///not exact Draw call, not looking at the documents right now
tile.Draw(spriteBatch, tileTexture, tile.Position);
}
这就是我认为你所追求的要点。如果我走错了路,请告诉我我会调整答案。我确实跳过了一些更具体的细节,但如果您有任何问题,请点击链接,您可以询问更多信息。
已编辑:绘图部分不是代码格式