2013-10-08 76 views
3

我一直在想要尝试创建一个RPG游戏,一个简单的游戏与运动,拿起物品,并打开门。从阵列生成瓷砖地图

我一直在思考关于瓷砖地图引擎很长一段时间,但我无法找到任何工作:/

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

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

当发动机通过阵列,这将有0的,1的,等跑,我在想一个switch语句,像:

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

问题是,我不知道如何实现这一点,我所能创建的所有东西都是一个贯穿始终的引擎,并根据您首先加载到游戏中的内容生成。

我知道这很混乱,因为我不善于解释自己。

在此先感谢。

+0

你是在正确的轨道上。你可能想要做的下一步,是弄清楚如何加载/保存瓷砖地图数据到磁盘,而不是在你的代码中指定地图。 – jgallant

+0

也许通过使用StreamReader? 现在我唯一的问题是如何将代码放在一起:/ – QuackTheDuck

+0

您可能会对此感兴趣:http://www.mapeditor.org/您可以创建/编辑/保存地图数据格式,然后将其加载到你的游戏。 (关于如何加载的例子很容易在网上找到) – jgallant

回答

3

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

我敢肯定,你可以找到许多其他问题。

关于你写的代码片段,你不想叫

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].

下一步是打印屏幕上的瓦片访问它。我会假设你已经把你的瓷砖加载到一个2维数组中,并带有瓦片索引。

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

+0

谢谢,但我如何做一个具有碰撞的瓷砖,或使它可以移动的事件? – QuackTheDuck