从数组生成平铺贴图

问题描述 投票:3回答:2

我一直在考虑尝试创建一个RPG游戏,一个带动作的简单游戏,拿起物品,打开门。

我一直在思考瓷砖地图引擎很长一段时间,但我找不到任何有用的东西:/

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

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

当引擎运行数组时,它将有0,1等,我正在考虑一个switch语句,如:

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

问题是我不知道如何使这成为可能,我能够创建的所有内容都是一个运行的引擎,并根据您首先加载到游戏中的内容生成。

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

提前致谢。

c# enums tile
2个回答
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].访问它

下一步是在屏幕上打印瓷砖。我假设你已经将瓷砖加载到具有瓷砖索引的二维数组中。

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
投票

要绘制平铺贴图,请使用此伪代码

mapPlaceX = 0;
mapPlaceY = 0;

for (var y=0; y<TILEMAP_ARRAY.length; y++) {    

    mapPlaceX = 0;
    if (y != 0) { mapPlaceY += 30; }

        for (var x=0; x<TILEMAP_ARRAY[y].length; x++) {

                if (TILEMAP_ARRAY[y][x] == '0') { 
                    // draw image here  
                }           
                mapPlaceX += 30;

        }       
}

如果数组X和Y等于“0”,则遍历整个数组并绘制特定图像。

对于碰撞,请使用:

var desiredX = playerX + pAngx;
var desiredY = playerX + pAngy; 

var indX = desiredX / 30;
var indY = desiredY / 30;

var cell = TILEMAP_ARRAY[indY][indX];

if (cell == 0) {
    // collision so don't move

}
else {
    // move

}

这将查找要移动到的数组中的单元格,如果它不等于0则移动。

© www.soinside.com 2019 - 2024. All rights reserved.