C# 使用XNA中的平铺创建和保存地图

C# 使用XNA中的平铺创建和保存地图,c#,xna,C#,Xna,我正在尝试制作一个“地牢爬虫”类型的游戏演示,这是我第一次真正制作出乒乓球和吃豆人克隆以外的任何东西。我现在最大的障碍是创造实际水平。我已经阅读了一篇关于如何在屏幕上绘制瓷砖的教程,但是我找不到任何关于从那里开始的内容 如何从一个屏幕变成一个更大的地牢?任何帮助都是值得赞赏的。 < P>你应该考虑使用2维数组。 通过这种方式,您可以非常轻松地直观地表示数据 从初始化开始: //2D array int[,] array; 一些样本数据: array= new int[,] {

我正在尝试制作一个“地牢爬虫”类型的游戏演示,这是我第一次真正制作出乒乓球和吃豆人克隆以外的任何东西。我现在最大的障碍是创造实际水平。我已经阅读了一篇关于如何在屏幕上绘制瓷砖的教程,但是我找不到任何关于从那里开始的内容


如何从一个屏幕变成一个更大的地牢?任何帮助都是值得赞赏的。

< P>你应该考虑使用2维数组。 通过这种方式,您可以非常轻松地直观地表示数据

从初始化开始:

//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);
    }
}
然后加载你的纹理,而不是一次只查看一个项目。根据纹理大小,您可以轻松地在屏幕上绘制贴图中显示的纹理:

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);
    }
}
for(int i=0;i
PSK是由Microsoft创建的一个演示,它使用ASCII文件创建标高。还有许多演示和教程以及其他相关内容。这和乔恩描述的方法是一样的

例如:

.......
.....e.
xx...xx
..s....
如果点是空白,s是起始位置,e是敌人。因为您知道(例如)每个磁贴都是32x32像素,所以只需将“s”定位在坐标(2x32,3*32)处即可

有很多方法可以解决这个难题


要制作多个屏幕,您需要实现一个camera类。您可能需要的是滚动级别。但我建议您在进一步学习之前,首先学习从数组、ascii文件等制作一个屏幕。

如果您实现了“保存/加载”,则设计地图会容易得多。

这是一个很好的答案。对于像我这样的初学者来说非常有用@乔恩,你知道网上有什么关于这个的资源吗?试图找到基本的东西被证明是一种巨大的时间浪费。我花了3个多星期寻找应该是基本的东西(比如让球沿着平台滚动),但我仍然没有找到任何东西。@。它很好地解释了这些概念:让球沿着平台滚动听起来很基本,但实际上有点复杂。您正在处理移动、碰撞检测和碰撞响应。