在XNA中使用切片创建和保存贴图

时间:2011-11-23 18:10:12

标签: c# xna

我正在尝试制作一款“地下城爬虫”型游戏演示,这是我第一次真正做出超越Pong&吃豆人克隆。我现在最大的悬念是创造实际水平。我已经完成了如何在屏幕上绘制瓷砖的教程,但我找不到任何关于从那里去的地方。

如何从一个屏幕转到制作一个更大的地牢?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:6)

您应该考虑使用二维数组开始。 通过这种方式,您可以非常轻松地直观地表示数据。

从初始化开始:

//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);
    }
}

答案 1 :(得分:1)

PSK http://msdn.microsoft.com/en-us/library/dd254918(v=xnagamestudio.31).aspx是由Microsoft创建的演示,它使用ASCII文件创建关卡。还有许多演示和教程以及其他内容。这与Jon描述的方法相同。

示例:

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

如果一个点是空的空间,则s是起始位置,e是敌人。因为您知道每个图块都是(例如)32x32像素,所以您可以简单地将's'放置在坐标(2x32,3 * 32)处。

有许多方法可以应对这种困难。

要制作多个屏幕,您需要实现相机类。您可能想要的是滚动级别。但我建议你先学习从数组,ascii文件等制作单个屏幕,然后再继续。

答案 2 :(得分:1)

如果为tiled map format实施保存/加载,设计地图会容易得多。