在XNA中创建和保存带有tile的地图



我正在尝试制作一个"地下城爬行者"类型的游戏演示,这是我第一次真正制作《Pong》以外的东西。吃豆人克隆。我现在最大的问题是如何创造真正的关卡。我已经看了一个关于如何在屏幕上绘制贴图的教程,但是我找不到任何关于从哪里开始的内容。

我如何从一个屏幕制作一个更大的地下城?

您应该考虑从使用二维数组开始。通过这种方式,您可以很容易地可视化地表示您的数据。

从初始化开始:

//2D array
int[,] array;

一些示例数据:

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

创建一个枚举,它将索引映射中的每个整数:

enum Tiles
{
    Undefined = 0,
    Dirt = 1,
    Water = 2,
    Rock = 3
}

然后加载你的纹理,而不是通过一次一个项目地查看你的数组。根据你的纹理大小,你可以很容易地绘制你的纹理在屏幕上呈现在你的地图:

for (int i = 0; i < array.Count; i++)
{
    for (int j = 0; j < array[0].Count; j++)  //assuming always 1 row
    {
       if (array[i][j] == (int)Tiles.Undefined) continue;
       Texture = GetTexture(array[i][j]);  //implement this
       spriteBatch.Draw(Texture, new Vector2(i * Texture.Width, j * Texture.Height), null, Color.White, 0, Origin, 1.0f, SpriteEffects.None, 0f);
    }
}

PSK http://msdn.microsoft.com/en-us/library/dd254918(v=xnagamestudio.31).aspx是由Microsoft创建的一个演示,它使用ASCII文件来创建关卡。还有很多demo,教程和其他东西。这和Jon描述的方法是一样的。

的例子:

.......
.....e.
xx...xx
..s....

其中点为空白,s为起始位置,e为敌人。因为你知道每个贴图(例如)是32x32像素,你只需将's'定位在坐标(2x32,3*32)处。

有很多很多方法来处理这个难题。

要制作多个屏幕,你需要实现一个camera类。你可能想要的是一个滚动关卡。但是我建议你在进一步学习之前先学会从数组,ascii文件等中制作单个屏幕。

如果你为平铺地图格式实现save/load,那么设计地图会容易得多。

最新更新