2013-11-24 74 views
-1

所以我是XNA的新手,並試圖以最簡單的方式在屏幕上繪製多個精靈。我希望每個精靈都在X軸上增加,這樣我就可以在屏幕上留下多個精靈了。在XNA中繪製多個精靈,位置增加

我已經定義:

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

將'pos.X + = 1'更改爲'pos + new Vector2(1,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); 
    } 
} 
+0

感謝您的回覆,您建議的代碼使精靈在X軸上飛過屏幕,我不希望它這樣做,我希望它保持靜止並分別繪製兩個精靈,一個在原始座標處,之後的每一個X軸+50像素,所以它只是作爲一個重複的精靈線? – Rich

+0

啊。設置一個FOR循環並從該FOR循環中調用spriteBatch.Draw。您必須在循環的任何迭代中使用遞增的X,Y來實例化新的Vector2。合理? –

+0

恩,你能寫一個簡單的代碼示例嗎?我理解這個理論,但是將它實現爲代碼對於我來說是另一個故事,作爲初學者! (對不起!) – Rich

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); 
    } 
} 

就像前面說的那樣,您需要一個矩形列表,其中包含所有圖像矩形。希望我幫助,祝你好運!