使用for循环xna 4.0绘制多个精灵
本文关键字:绘制 精灵 for 循环 xna 使用 | 更新日期: 2023-09-27 18:24:12
我目前正在开发一款平台游戏,我试图在一个屏幕状态中绘制40个项目,但我不想全部硬编码。以下是我迄今为止所尝试的:
精灵等级:
class Sprite
{
//texture, position and color
public Texture2D texture;
public Vector2 position;
public Color color;
}
Definiton:
Sprite levelboxbg;
int LevelBoxX = 20;
装载:
levelboxbg = new Sprite();
levelboxbg.texture = Content.Load<Texture2D>("LevelBoxBeta");
levelboxbg.position = new Vector2(0, 0);
levelboxbg.color = Color.White;
执行:
public void DrawLevelBoxes(SpriteBatch spriteBatch)
{
for (int i = 0; i < 10; i++)
{
spriteBatch.Draw(levelboxbg.texture, new Vector2(LevelBoxX + 20 ,0), levelboxbg.color);
LevelBoxX += 20;
}
}
然后调用draw函数中的方法。
Visual studio为此给了我0个错误,它将运行;然而,当我到达应该画方框的屏幕时,它只画了一小部分,然后它们就消失了。
非常感谢您的帮助,感谢您花时间阅读本文。
您的LevelBoxX会变为无穷大,因此这些框很快就会从屏幕上用完。您可以在for循环之前重置LevelBoxX,如下所示:
public void DrawLevelBoxes(SpriteBatch spriteBatch)
{
LevelBoxX = 20;
for (int i = 0; i < 10; i++)
{
spriteBatch.Draw(levelboxbg.texture, new Vector2(LevelBoxX + 20 ,0), levelboxbg.color);
LevelBoxX += 20;
}
}
或者只声明一个局部变量:
public void DrawLevelBoxes(SpriteBatch spriteBatch)
{
int counter = 20;
for (int i = 0; i < 10; i++)
{
spriteBatch.Draw(levelboxbg.texture, new Vector2(counter + 20 ,0), levelboxbg.color);
counter += 20;
}
}