在XNA中绘制多个精灵,并增加位置

时间:2013-11-24 21:54:16

标签: c# xna xna-4.0

所以我是XNA的新手,并试图以最简单的方式将多个精灵绘制到屏幕上。我想让每个精灵在X轴上递增,这样我就可以在屏幕上画出多个精灵。

我定义了:

Vector2 pos;

LoadContent函数中:

pos = new Vector2(0, 0);

并在Draw我有:

spriteBatch.Draw (circle, pos, Color.White); //Draws sprite to screen in correct position
spriteBatch.Draw(circle, (pos.X += 1), Color.White); //causes error and doesnt draw

希望我已经解释得这么好了,你可以看到我正在尝试做什么,编译器不同意(pos.X += 50)(我试图将X位置增加50) 。 我知道我可以用更长的路来为每次绘制创建一个新的Vector2,但这会产生多行我认为肯定是不必要的代码,并且必须有这样一个快速的方法去做?

2 个答案:

答案 0 :(得分:4)

Draw的方法签名要求第二个参数是Vector2,对吗?

如果是,则(pos.X + = 1)不是Vector2。它是一个语句,它增加了pos Vector2变量的X参数,但语句不返回Vector2对象的实例。

修改:代码如下:

public void DrawSprites()
{
    // setup circle here
    // setup spritebatch here
    // setup initial pos here
    // setup MAX_ITERATIONS here

    var INCREMENT_VALUE = 50;

    for (var i = 0; i < MAX_ITERATIONS; i++) {
        var iteratedPos = pos + new Vector2((INCREMENT_VALUE * i), 0); // per Nikola's comment
        spriteBatch.Draw(circle, iteratedPos, 0), Color.White);
    }
}

答案 1 :(得分:1)

您需要制作纹理的绘制矩形列表。

//implement Texture2D (called "image") and SpriteBatch (called "spriteBatch")
List<Rectangle> rectangles = new List<Rectangle>();
const int ITERATIONS = 10; //or whatever you want the iterations to be
const int INCREMENT_VALUE = 50; //again, whatever you want it to be

for (int i = 0; i < ITERATIONS; i++)
{
    for (int j = 0; j < rectangles.Count; j++)
    {
        rectangles[j].X += INCREMENT_VALUE * i;
        spriteBatch.Draw(image, rectangles[j], Color.White);
    }
}

如前所述,您需要一个矩形列表,其中包含所有图像矩形。希望我帮忙,祝你好运!