【问题标题】:Generate Tile Map from array从数组生成平铺地图
【发布时间】:2018-09-17 09:59:20
【问题描述】:

我一直在考虑尝试创建一个 RPG 游戏,一个包含移动、拾取物品和开门的简单游戏。

我一直在思考瓦片地图引擎,但我找不到任何可行的方法:/

基本上我想要完成的是我有一个enum,比如:

public enum tileSort { Dirt, Grass, Stone, Empty }

当引擎运行数组时,数组中会有 0、1 等,我正在考虑一个 switch 语句,类似于:

switch(tileSort) 
{ 
    case '0':  tileList.Add(Content.Load<Texture2D>("Tiles/grass")) 
}

问题是我不知道如何让这成为可能,我所能创造的只是一个引擎,它会根据您首先加载到游戏中的内容来运行和生成。

我知道这很令人困惑,因为我不善于解释自己。

提前致谢。

【问题讨论】:

  • 你在正确的轨道上。接下来您可能想要做的是弄清楚如何将瓦片地图数据加载/保存到磁盘,而不是在代码中指定地图。
  • 也许通过使用 StreamReader?现在我唯一的问题是如何将代码放在一起:/
  • 您可能对此感兴趣:mapeditor.org 您可以以数据格式创建/编辑/保存地图,然后将它们加载到您的游戏中。 (关于如何加载的示例在网上很容易找到)
  • 谢谢,但我找不到 .tmx 加载器库 D 的下载:

标签: c# enums tile


【解决方案1】:

您可以使用一些工具来帮助您:

我相信你可以找到很多其他人。

关于你写的代码的sn-ps,你不想调用

Content.Load<Texture2D>("Tiles/grass")

单个纹理多次。仅加载每个纹理一次并多次打印相同的资源。你可以有这样的东西:

var tileList = new List<Texture2D>();
string[] tiles = { "dirt", "grass", "stone", "empty" };

foreach (var s in tiles) {
    tileList.Add(Content.Load<Texture2D>("Tiles/" + s));
}

现在每个纹理只加载一次,您可以使用tileList[index].访问它

下一步是在屏幕上打印图块。我假设你已经将你的瓦片加载到一个带有瓦片索引的二维数组中。

int[,] tileMap = {{1, 2, 0}, {0, 1, 2}, {3, 3, 1},};

for (int i = 0; i < 3; ++i)
    for (int j = 0; j < 3; ++j)
        spriteBatch.Draw(tileList[tileMap[i, j]], new Vector2D(50*i, 50*j), Color.White);
        // Assuming the tiles are 50x50 pixels

本教程教你更详细的内容:http://www.xnaresources.com/?page=Tutorial:TileEngineSeries:1

【讨论】:

  • 谢谢,但我如何制作具有碰撞的特定图块,或使其可用于事件??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2014-10-23
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多