所以我是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
,但这会产生多行我认为肯定是不必要的代码,并且必须有这样一个快速的方法去做?
答案 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);
}
}
如前所述,您需要一个矩形列表,其中包含所有图像矩形。希望我帮忙,祝你好运!