2012-09-14 39 views
1

目前,我的遊戲使用了一些像素檢測。 例如,對於精靈,我檢索其位置的像素。 當我移動它,位置值有一定的小數,如:如何在其位置上移動一個沒有小數的精靈

thePixel = new vector(position.X, position.Y); 
//thePixel = (52.2451, 635.2642) 

所以我必須紮在這些值

thePixel = new vector((float)Math.Round(position.X, 0), (float)Math.Round(position.Y, 0)); 
//thePixel = (52, 635) 

我想知道,如果有一些其他的方式來獲得完美的位置(意思是沒有小數)而不是四捨五入。 這可能是一個移動方法問題嗎?

Thx閱讀,希望你能幫助。

回答

3

你不能真正得到各地要圓自己的價值觀,但你可以通過使用擴展方法使其要好很多代碼:

public static class Vector2Extensions 
{ 
    public static Vector2 Floor(this Vector2 vector) 
    { 
     return new Vector2((float)Math.Floor(vector.X), (float)Math.Floor(vector.Y)); 
    } 
} 

(正如你看到的,我個人更喜歡。FloorRound我也有一個Ceiling

然後,你可以使用它像這樣:

HandleCollision(position.Floor()); 

當然,如果你正在做每像素碰撞檢測 - 你的碰撞數學應該可能是基於整數的(不存儲爲Vector2中的float)。你可以使用Point。原來我也太擴展方法:

public static class Vector2Extensions 
{ 
    public static Point AsXnaPoint(this Vector2 v) 
    { 
     return new Point((int)v.X, (int)v.Y); 
    } 
} 

然後:

HandleCollision(position.AsXNAPoint()); 

或者可能:

HandleCollision(position.Floor().AsXNAPoint()); 
+0

像往常一樣,THX安德魯。 順便說一下,你是讓我想創建自己的視頻遊戲的人(包括你的「黑暗」遊戲,以及你給我的一些提示)的一部分。 Thx再次 – Sharpnel

+0

不客氣:) –