繁体   English   中英

自动绘制Texture2D,而无需重复写入多行

[英]Autodraw Texture2D without writing multiple lines repeatedly

我试图通过在到达屏幕末端时将x和y坐标添加到一行中来绘制Texture2D Draw方法不会绘制多个精灵,它只是以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);
}

乍看之下,您的代码看起来还不错,即使我最近看过do循环也是如此。 我假设你要停止拉伸后的X位置超过 460个像素,因为它从0开始。所以,简单地翻转你>< ,你还需要重置您的X位置每一帧,否则它会从哪里开始它停了下来。

do
{
     place.X += 20;
     spriteBatch.Draw(EarthGrass, place, Color.White);
} while (place.X > 460);
place.X = 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

暂无
暂无

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

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