我一直在考虑尝试创建一个RPG游戏,一个带动作的简单游戏,拿起物品,打开门。
我一直在思考瓷砖地图引擎很长一段时间,但是找不到有用的东西:/
基本上我想要完成的是我有一个enum
,如:
public enum tileSort { Dirt, Grass, Stone, Empty }
当引擎运行数组时,它会有0,1等等,我正在考虑一个switch语句,如:
switch(tileSort)
{
case '0': tileList.Add(Content.Load<Texture2D>("Tiles/grass"))
}
问题在于我不知道如何使这成为可能,我能够创建的所有内容都是一个贯穿始终的引擎,并根据您首先加载到游戏中的内容生成。
我知道这很令人困惑,因为我不善于解释自己。
提前致谢。
答案 0 :(得分: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
答案 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,则将移动。