【问题标题】:c# xna game development tile map draw methodc# xna游戏开发tile地图绘制方法
【发布时间】:2010-11-24 00:25:01
【问题描述】:

目前我正在用 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++;
         }
    }

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

谢谢,伊恩

【问题讨论】:

    标签: c# map xna


    【解决方案1】:

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

    j 未在您发布的方法中声明,因此我假设它是 int 类型的实例字段,初始化为 0。每次循环前都需要 重新初始化为 0 ,否则j &lt; numTiles 将在除第一帧之外的每一帧上为假(因此瓷砖只会在第一帧上绘制——因为屏幕在每帧开始时被擦除,如果瓷砖消失了'不会不断地重新绘制)。

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

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

    【讨论】:

    • 啊,好酷,我将它们乘以它的大小,这样下一个图块将绘制在前一个图块旁边,它的 x 和 y 位置是根据它所在的列和行,如果这有意义吗?
    • 感谢您的帮助,因为它现在可以工作了,我还更改了将 x/y 乘以它的高度/宽度的位置:)
    • 很高兴我能帮上忙 ;-) 我现在对乘法有了更深入的了解……这只需要在创建瓷砖后完成一次
    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多