繁体   English   中英

C#XNA游戏开发图块地图绘制方法

[英]c# xna game development tile map draw method

目前,我正在用C#开发游戏,即时消息有点卡住。

我需要画瓷砖地图。 我使用xml阅读了磁贴图,并将每个磁贴存储在其x和y位置的列表中。 但是我在draw方法上有点麻烦。

     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++;
         }
    }

我以为这会起作用,并且磁贴图出现在屏幕上,但随后很快消失了,我有什么想法做错了吗? 对不起,如果真的很傻。

谢谢,伊恩

看起来像是For循环错误翻译的情况:-)

j不是在您发布的方法中声明的,因此我假设它是int类型的实例字段,其初始化为0。 每次循环之前都需要将其重新初始化为0 ,否则j < numTiles在每个循环中都为false除了第一帧以外的其他帧(因此,拼贴只会在第一帧上绘制-由于屏幕在每个帧的开头都会被擦除,因此,如果不经常重新绘制它们,这些拼贴就会消失)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM