2013-01-23 41 views
0

這是我的第一個問題,我剛剛開始在C#中編寫代碼,所以如果我在做一些愚蠢的事情,請客氣一點。事情是,我想用xna編寫一個小型的2D遊戲,因此我創建了一個帶紋理的32x32 px盒子,這個盒子應該是玩家。我可以使用箭頭鍵通過寫入一個類的播放機等如何使用Vector2 {get; set;}來計算方塊的角點

namespace MyGame 
{ 
    class Player 
    { 
     public Texture2D Textur; 
     public Vector2 Position { get; set; } 
    } 
} 

,然後使用

KeyboardState keyboard = Keyboard.GetState(); 
if (keyboard.IsKeyDown(Keys.Right)) player.Position += new Vector(5,0); 
//and so on 

其中5是像素的量來移動播放器,與一個鍵擊球員移動。 我想要是寫這樣的

class Player 
{ 
    public Texture2D Textur; 
    public Vector2 Position { get; set; } 
    public Vector2 UpperRightCorner = new Vector2(Position.X + 32, Position.Y); 
} 

但很明顯,這是行不通的。甚至認爲我讀了msdn上關於get的文檔;組;我真的不明白,它是如何工作的。 我需要角落,或者更確切地說是角落旁邊的像素來編寫碰撞方法。這種方法應該每次都要問,當我按下一個箭頭鍵時,播放器前面有什麼樣的水平方塊,然後調整速度。如果有固體塊(如牆),將運動設置爲0。

任何想法,我怎麼能寫這個角落的東西在玩家類?我可以在實例化玩家後在主類中調用它,但我更願意將它放入玩家類。

+0

看到http://gamedev.stackexchange.com/questions/20703/bounding-box-of-a-rotated-rectangle -2d –

回答

1

當它被實例化你分配一個值UpperRightCorner。這個值將保持不變。每次訪問時都可以使用getter重新編寫該代碼以重新計算UpperRightCorner。例如:

public Vector2 UpperRightCorner 
{ 
    get 
    { 
     return new Vector2(Position.X + 32, Position.Y); 
    } 
} 
+0

非常感謝!這正如我想要的那樣工作:) –

2

它將無法正常工作,你的位置還沒有被創建..

在您的播放器的構造函數(public Player()例如)必須設置位置到new Vector2第一。例如:

public Player() 
{ 
    Position = new Vector2(0,0); 
    UpperRightCorner = new Vector2(Position.X + 32, Position.Y); 
} 
+1

可能要提一提的是,Kitopa先生還需要在玩家移動時更新UpperRightCorner – wes

1

Ginosaji的回答應該給你你要求的。有輕微的修改,也可以進行自動處理任何規模大小質地選擇:

public Vector2 UpperRightCorner { 
    get { 
     return new Vector2(Position.X + Textur.Width, Position.Y); 
    } 
}