Autodraw Texture2D无需重复写入多行

时间:2013-09-17 21:23:18

标签: c# xna

我试图通过在到达屏幕末尾时添加到x和y坐标来绘制一行中的Texture2DDraw方法不会绘制多个精灵,只是以20的速度移动第一个精灵,而不是每20个像素绘制一个精灵。

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.White);

    // TODO: Add your drawing code here
    spriteBatch.Begin();
    spriteBatch.DrawString(GameText, MenuText, new Vector2(325,75), Color.Red);

    do
    {  
        spriteBatch.Draw(EarthGrass, place, Color.White);
        place.X += 20;
    } while (place.X < 800);
    place.X = -20;
    place.Y += 20;
    do
    {                
        int IDBint = IDB.Next(11);
        if (IDBint == 10)
        {
            spriteBatch.Draw(PooperMachoOre, place, Color.White);
        }
        else
        {
            spriteBatch.Draw(EarthDirt, place, Color.White); 
        }
        place.X += 20; 

    } while (place.X < 800);
    place.X = -20;
    place.Y += 20;
    spriteBatch.End();
    base.Draw(gameTime);
}

2 个答案:

答案 0 :(得分:0)

乍一看你的代码看起来很好,即使我这些天大麦看到做循环。我假设你想在X位置更多而不是460像素后停止绘图,因为它从0开始。所以只需将你的>翻转到<,你也会需要在每帧重置X位置,否则它将从中断处开始。

do
{
     place.X += 20;
     spriteBatch.Draw(EarthGrass, place, Color.White);
} while (place.X > 460);
place.X = 0;

答案 1 :(得分:0)

如果你这样做:

do
{                
    int IDBint = IDB.Next(11);
    if (IDBint == 10)
        spriteBatch.Draw(PooperMachoOre, place, Color.White);
    else
        spriteBatch.Draw(EarthDirt, place, Color.White);

    place.X += 20;

} while (place.X < 800);

您的Draw将更改所有图像序列以绘制每一帧(并且 Cyral 写入时,它每秒发生60次)。
您不必在Draw方法中调用随机生成器,但必须将纹理序列设置为仅绘制一次。例如,在Initialize中。