c#xna游戏开发瓦片地图绘制方法

时间:2010-11-23 14:52:50

标签: c# map xna

目前我正在用c#开发一款游戏而且我有点陷入困境。

我需要绘制瓷砖地图。我使用xml读取了tile图,并将每个tile存储在一个带有x和y位置的列表中。但我在绘制方法上遇到了一些麻烦。

     public void Draw(SpriteBatch theBatch)
     {
         int tileWidth = 32;
         int tileHeight = 32;
         int numTiles = 100;
         while (j < numTiles)
         {
             tileMap[j].Position.X *= tileWidth;
             tileMap[j].Position.Y *= tileHeight;
             theBatch.Draw(mSpriteTexture, tileMap[j].Position, Color.White);
             Console.WriteLine("tile drawn");
             Console.WriteLine("x = " + tileMap[j].Position.X);
             Console.WriteLine("y = " + tileMap[j].Position.Y);
             Console.WriteLine(" i = " + j);
             j++;
         }
    }

我认为这会起作用并且瓷砖地图会出现在屏幕上然后很快消失,任何想法我做错了什么?抱歉,如果真的很傻。

谢谢,伊恩

1 个答案:

答案 0 :(得分:1)

看起来像Mistranslated For Loop的案例: - )

j未在您发布的方法中声明,因此我假设它是一个类型为int的实例字段,初始化为0.需要将重新初始化为0循环之前的时间,否则j < numTiles将在除第一帧之外的每一帧上都为假(因此仅在第一帧上绘制图块 - 因为屏幕在每帧的开头被删除,如果没有经常重新绘制,则瓷砖会消失。)

另外,为什么要将每个图块的位置乘以它的大小(在每一帧上也是如此!)?这将很快导致在几帧之后将图块绘制在屏幕外,因为它们的位置将随着绘制的帧数呈指数增加。如果图块没有移动,则根本不需要修改它们的位置(如果它们正在移动,则应该在Update方法中完成,而不是Draw)。

最后,确保在完成调试时注释掉Console.WriteLine调用,因为写入控制台(每秒几次)相当慢。