Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问.txt文件中的数据以在XNA中指定具有特定属性的特定分幅?_C#_Properties_Xna_Collision_Tiles - Fatal编程技术网

C# 如何访问.txt文件中的数据以在XNA中指定具有特定属性的特定分幅?

C# 如何访问.txt文件中的数据以在XNA中指定具有特定属性的特定分幅?,c#,properties,xna,collision,tiles,C#,Properties,Xna,Collision,Tiles,好吧,一开始你可能在想;“哦,太好了,另一个问题,问这个问题的人以前没有研究过这个问题……” 我向你保证,我已经彻底地研究了这个话题,但我的具体问题并没有那么幸运。我的问题是,我已经阅读了教程,它成功地让我创建了一个简单的.txt文件来处理级别的布局,然后可以在稍后迭代读取整数值,最后在屏幕上绘制相应的平铺纹理 在上面链接的教程中,基本上创建了Map.cs类,该类最终负责加载平铺纹理: void LoadTileTextures(ContentManager content) { t

好吧,一开始你可能在想;“哦,太好了,另一个问题,问这个问题的人以前没有研究过这个问题……”

我向你保证,我已经彻底地研究了这个话题,但我的具体问题并没有那么幸运。我的问题是,我已经阅读了教程,它成功地让我创建了一个简单的.txt文件来处理级别的布局,然后可以在稍后迭代读取整数值,最后在屏幕上绘制相应的平铺纹理

在上面链接的教程中,基本上创建了Map.cs类,该类最终负责加载平铺纹理:

void LoadTileTextures(ContentManager content)
{
      tiles = new List<Texture2D>();
      tiles.Add(content.Load<Texture2D>("Blocks/sky"));           // 0
      tiles.Add(content.Load<Texture2D>("Blocks/grass_block"));   // 1
      tiles.Add(content.Load<Texture2D>("Blocks/dirt_block"));    // 2
      tiles.Add(content.Load<Texture2D>("Blocks/rock_block"));    // 3
}
void LoadTiletTextures(ContentManager内容)
{
tiles=新列表();
tiles.Add(content.Load(“Blocks/sky”);//0
tiles.Add(content.Load(“Blocks/grass_block”);//1
tiles.Add(content.Load(“Blocks/dirty_block”);//2
tiles.Add(content.Load(“Blocks/rock_block”);//3
}
我认为这些纹理是根据加载顺序指定的数值。在此之后,将创建一个方法,该方法负责加载,我猜将分配平铺数据:

void LoadMapData(string name)
{
      string path = name + ".txt";

      // Width and height of our tile array
      int width = 0;
      int height = File.ReadLines(path).Count();

      StreamReader sReader = new StreamReader(path);
      string line = sReader.ReadLine();
      string[] tileNo = line.Split(',');

      width = tileNo.Count();

      // Creating a new instance of the tile map
      tileMap = new int[height, width];
      sReader.Close();

      sReader = new StreamReader(path);

      for (int y = 0; y < height; y++)
      {
             line = sReader.ReadLine();
             tileNo = line.Split(',');

             for (int x = 0; x < width; x++)
             {
                 tileMap[y, x] = Convert.ToInt32(tileNo[x]);
             }
         }

         sReader.Close();
}
void LoadMapData(字符串名称)
{
字符串路径=名称+“.txt”;
//我们的瓷砖阵列的宽度和高度
整数宽度=0;
int height=File.ReadLines(path.Count();
StreamReader sReader=新的StreamReader(路径);
string line=sReader.ReadLine();
字符串[]tileNo=line.Split(',');
宽度=tileNo.Count();
//创建平铺贴图的新实例
tileMap=新整数[高度、宽度];
sReader.Close();
sReader=新的StreamReader(路径);
对于(int y=0;y

上面提到的链接是关于同一主题的问题,使用相同的教程代码。回答他的问题的那个人对我个人来说太模糊了。我理解他的意思,只是我自己没有足够的经验来详细阐述他的建议

只是重复一下,我的问题是我不确定.txt文件中的数据是如何分配给相应的tile值的。如果我知道这是如何完成的,那么我就能够在.txt文件中为这些分幅分配某些值。具体地说,我想知道如何为.txt文件中的每个磁贴指定一个值,例如布尔值,无论它是否为实心,这样我就可以继续创建一个Collision()方法来处理“.Intersects”函数

很抱歉,如果这是一个很难回答的问题,或者遇到了困惑,但是我在这个主题上遇到了一堵墙,需要一些帮助

感谢您抽出时间阅读此问题

你好,奥利


大家好^

如果要添加新图案,可以先将其添加到平铺中:

void LoadTileTextures(ContentManager content)
{
      tiles = new List<Texture2D>();
      tiles.Add(content.Load<Texture2D>("Blocks/sky"));           // 0
      tiles.Add(content.Load<Texture2D>("Blocks/grass_block"));   // 1
      tiles.Add(content.Load<Texture2D>("Blocks/dirt_block"));    // 2
      tiles.Add(content.Load<Texture2D>("Blocks/rock_block"));    // 3
      tiles.Add(content.Load<Texture2D>("Blocks/new_block"));     // 4

}
void LoadTiletTextures(ContentManager内容)
{
tiles=新列表();
tiles.Add(content.Load(“Blocks/sky”);//0
tiles.Add(content.Load(“Blocks/grass_block”);//1
tiles.Add(content.Load(“Blocks/dirty_block”);//2
tiles.Add(content.Load(“Blocks/rock_block”);//3
tiles.Add(content.Load(“Blocks/new_block”);//4
}
然后,您可以将4作为新值添加到要查看新块的txt文件中。 当然,您还应该创建新的_块纹理2d

如果要避免使用额外纹理,则可以修改绘制方法:

public void Draw(SpriteBatch spriteBatch)
{
    for (int y = 0; y < tileMap.GetLength(0); y++)
    {
        for (int x = 0; x < tileMap.GetLength(1); x++)
        {
          if(tileMap[y,x] != 4)
            {
            spriteBatch.Draw(
                tiles[tileMap[y, x]],
                new Vector2(x * tileWidth, y * tileHeight),
                Color.White);
            }
        }
    }
}
public void Draw(SpriteBatch-SpriteBatch)
{
for(int y=0;y

尽管如此,我想说创建透明纹理使代码在将来更易于阅读和维护

如果要添加新图案,可以先将其添加到平铺中:

void LoadTileTextures(ContentManager content)
{
      tiles = new List<Texture2D>();
      tiles.Add(content.Load<Texture2D>("Blocks/sky"));           // 0
      tiles.Add(content.Load<Texture2D>("Blocks/grass_block"));   // 1
      tiles.Add(content.Load<Texture2D>("Blocks/dirt_block"));    // 2
      tiles.Add(content.Load<Texture2D>("Blocks/rock_block"));    // 3
      tiles.Add(content.Load<Texture2D>("Blocks/new_block"));     // 4

}
void LoadTiletTextures(ContentManager内容)
{
tiles=新列表();
tiles.Add(content.Load(“Blocks/sky”);//0
tiles.Add(content.Load(“Blocks/grass_block”);//1
tiles.Add(content.Load(“Blocks/dirty_block”);//2
tiles.Add(content.Load(“Blocks/rock_block”);//3
tiles.Add(content.Load(“Blocks/new_block”);//4
}
然后,您可以将4作为新值添加到要查看新块的txt文件中。 当然,您还应该创建新的_块纹理2d

如果要避免使用额外纹理,则可以修改绘制方法:

public void Draw(SpriteBatch spriteBatch)
{
    for (int y = 0; y < tileMap.GetLength(0); y++)
    {
        for (int x = 0; x < tileMap.GetLength(1); x++)
        {
          if(tileMap[y,x] != 4)
            {
            spriteBatch.Draw(
                tiles[tileMap[y, x]],
                new Vector2(x * tileWidth, y * tileHeight),
                Color.White);
            }
        }
    }
}
public void Draw(SpriteBatch-SpriteBatch)
{
for(int y=0;y

尽管如此,我想说创建透明纹理使代码在将来更易于阅读和维护

听起来你已经快要超过这个特定的瓷砖了 建筑

在当前代码中,平铺只有一个属性:纹理。因此,只需使用纹理列表即可跟踪平铺定义。但是,如果您想向平铺添加其他属性(例如,实心标志),您应该