XNA简单平铺映射冲突

时间:2015-02-01 17:24:39

标签: c# xna xna-4.0

我是新手,我正在制作一个非常简单的2D平台游戏,其中一个级别是从文本文件中加载的。我无法尝试如何弄清楚我的角色精灵如何与瓷砖碰撞。 这是我的游戏将运行的.txt示例:

1,1,1,1,1,1,1,1,
1,1,1,0,0,0,0,1,
1,1,0,0,0,1,0,1,
1,0,0,0,0,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,1,0,0,1,
1,S,0,1,1,0,F,1,
1,1,1,1,1,1,1,1,

我已经设法弄清楚如何成功地将它们绘制到页面上,但无法进一步发展。 当精灵的边缘接触到屏幕边缘并将其速度设置为0时,我当前的模型让我的角色与屏幕边缘碰撞,因为碰撞的布尔值等于true,但我不知道该怎么做阻止从.txt生成的 我当前绘制关卡的模型如下所示:

if (currentState == GameState.Playing)
                {
                    for (y = 0; y <= 7; y++)
                    {
                        string[] mapchars = maplines[y].Split(','); //where maplines is each row of characters and mapchars is each individual character//
                        for (x = 0; x <= 7; x++)
                        {

                            if (mapchars[x] == "1")
                            {
                                spriteBatch.Begin();
                                spriteBatch.Draw(block, new Vector2((200 + (50 * x)), ((50 * y))), Color.White);
                                spriteBatch.End();
                            }
                            if (mapchars[x] == "F")
                            {
                                spriteBatch.Begin();
                                spriteBatch.Draw(block, new Vector2((200 + (50 * x)), ((50 * y))), Color.Yellow);
                                spriteBatch.End();
                            }
                            if (mapchars[x] == "S")
                            {
                                spriteBatch.Begin();
                                spriteBatch.Draw(sprite, new Rectangle((200 + (50 * x)), ((50 * y)), 40, 40), Color.White*0.5f);
                                spriteBatch.End();
                            }
                            if (x > 7)
                            {
                                break;
                            }
                        }
                        if (y > 7)
                        {
                            break;
                        }
                    }
                }

其中maplines []是.txt的每一行,而mapchars []是每行的每个字符。 如果有人知道这个问题的解决方案,那将是一个很大的帮助:) 感谢。

1 个答案:

答案 0 :(得分:1)

不要这样做!你正在以这样编码的游戏浪费很多速度。我有一个问题。

  1. 首先,将所有.txt地图放入字符串[]中,这是一行字符串。使用File.ReadAllLines(string yourtxtfilepath)方法执行此操作。
  2. 完成此操作后,创建一个新的Block二维数组(Block [,])。你必须创建一个通用的抽象类Block,其中所有类型的块(rock,air,grass ......)都是从它继承的。
  3. 创建一个for循环,检查你得到的所有字符串数组中的所有字符。在该循环中,通过case语句检查字符是“1”还是“F”或其他内容。例如,如果它是'F',则将新的GrassBlock添加到Block 2维数组中。
  4. 最后,在循环之后,您可以在二维Block数组中获取地图,这非常适合访问地图中的所有块。
  5. 只需在Draw()方法中放置一个foreach循环,即可通过增加位置的宽度和高度来将每个块绘制到屏幕上。
  6. 如果您不理解我所说的内容,只需进行一些Google搜索即可获得必要的知识,以便您了解。首先要承认我试图解释你和之后的事情,你可以专注于碰撞,更先进。