目前我正在用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++;
}
}
我认为这会起作用并且瓷砖地图会出现在屏幕上然后很快消失,任何想法我做错了什么?抱歉,如果真的很傻。
谢谢,伊恩
答案 0 :(得分:1)
看起来像Mistranslated For Loop的案例: - )
j
未在您发布的方法中声明,因此我假设它是一个类型为int
的实例字段,初始化为0.需要将重新初始化为0循环之前的时间,否则j < numTiles
将在除第一帧之外的每一帧上都为假(因此仅在第一帧上绘制图块 - 因为屏幕在每帧的开头被删除,如果没有经常重新绘制,则瓷砖会消失。)
另外,为什么要将每个图块的位置乘以它的大小(在每一帧上也是如此!)?这将很快导致在几帧之后将图块绘制在屏幕外,因为它们的位置将随着绘制的帧数呈指数增加。如果图块没有移动,则根本不需要修改它们的位置(如果它们正在移动,则应该在Update方法中完成,而不是Draw)。
最后,确保在完成调试时注释掉Console.WriteLine调用,因为写入控制台(每秒几次)相当慢。