2013-05-03 97 views
0

我有麻煩提出了一個關於如何使用我的蛇遊戲數組的解決方案。我在400x400大小的窗口上有一個20x20像素的頭像。如何通過網格移動對象

areaGrid = new Vector2[columns, rows]; 

for (int x = 0; x < columns; x++) 
{ 
    for (int y = 0; y < rows; y++) 
    { 
     areaGrid[x, y] = new Vector2(x * 20, y * 20); 
     Console.WriteLine("areaGrid[{0},{1}] = {2}", x, y, areaGrid[x, y]); 
    } 
} 

所以自然會有400個「塊」,蛇的頭部加尾巴可以佔據。我在[5,5]的陣列中繪製了頭部,這是網格上的100,100號線。我希望頭部每次移動20個像素,這是陣列中的一個新點。因此,舉例來說,右邊的移動會將頭部放置在陣列中[5,6],在網格上放置在120,100。我只是不知道該怎麼做。我將如何通過我的更新方法中的數組實現移動?

+0

[這裏](HTTP://forum.chaos- project.com/index.php?topic=12210.0)是實現了蛇遊戲,並具有您可能需要的功能。 – noobob 2013-05-03 05:35:25

+0

將移動速度乘以elapsedTime總是一個好主意。所以,Position + = new Vector2(x * Speed * gameTime.ElapsedTime.TotalSeconds,y * Speed * gameTIme.ElapsedTime.TotalSeconds);例如,這會將其移動爲「每秒20個像素」,這樣可以更好地控制碰撞。特別是如果你做一個蛇遊戲。 – Deukalion 2013-05-03 07:24:04

回答

0

使用列表與塊座標:

List<Vector2> Snake = new List() { {5,5}, {5,6}, {5,7}, {6,7}, {7,7} } 

和以使其:

var transform = Matrix.CreateScale(20) * Matrix.CreateTranslation(offset); 
SpriteBatch.Begin(null,null,..., tranform); 
foreach (var pos in Snake) 
    SpriteBatch.Draw(white_1x1_texture, pos, null, SnakeColor); 
SpriteBatch.End(); 

SpriteBatch.Begin(); 
foreach (var pos in Snake) { 
    var box = new Rectangle(offset.X + pos.X * 20, offset.Y + pos.Y*20, 20,20); 
    SpriteBatch.Draw(white_1x1_texture, box, null, SnakeColor); 
} 
SpriteBatch.End();