實作XNA FRAMEWORK中的INPUT操作 (二)

摘要:實作XNA FRAMEWORK中的INPUT操作 (二)

上一篇提到鍵盤資訊處理的部分,接下來我們繼續滑鼠資訊的處理。

在我的範例中,我沒有特別的去寫,滑鼠的處理,單純只做鍵盤的部分,所以滑鼠的部份大家可以自己玩看看。

跟鍵盤的範例一樣,首先建立一個滑鼠的類別。

接下來,將C#自動建置好的樣版修改一下,將前面三行刪除,增加以下兩行。
using Microsoft.XNA.Framework;   // 為了使用Vector2
using Microsoft.XNA.Input;  // 使用MOUSE
更改命名空間,可以依照自己喜好打上。

在MyMouse類別中,增加四個變數
兩個MouseState,以及記錄滑鼠位置等資訊。
MouseState previousState;   // 紀錄滑鼠先前的資訊
MouseState newState;  // 紀錄滑鼠目前的資訊
int moveX;  // 紀錄滑鼠X軸位置
int moveY;  // 紀錄滑鼠Y軸位置

類別裡面有以下方法
public MyMouse()
public void Update()
public Vector2 MouseMoved()
public Vector2 MousePosition()
public bool IsRightButtonPressed()
public bool IsRightButtonRelease()

在MyMouse的方法中,針對所增加的四個變數作初始化
moveX = moveY = 0;
previousState = newState = Mouse.GetState();  // 取得滑鼠新的資訊

Update,更新目前滑鼠資訊
previousState = newState;  // 將上一個資訊存在previousState中
newState = Mouse.GetState();  // 讀取新的資訊
moveX = newState.X - previousState.X;  // 計算X的平移量
moveY = newState.Y - previousState.Y;  // 計算Y的平移量

MouseMoved,回傳目前滑鼠向哪邊移動(向量),以及移動多少
Vector2 v = new Vector2(moveX, moveY);
return v;

MousePosition,回傳滑鼠目前的位置
Vector2 v = new Vector2(newState.X, newState.Y);
return v;

IsRightButtonPressed,回傳現在右鍵是否被壓下。
return (newState.RightButton == ButtonState.Pressed);

IsRightButtonRelease,回傳現在又見是否被放開
return (newState.RightButton==ButtonState.Released && previousState.RightButton==ButtonState.Pressed);

在這邊比較特別的是,IsRightButtonRelease這邊有兩個判斷,判斷先前的狀態有沒有被壓下,在來如果先前狀態被壓下,看看現在是不是放開了,如果是的話就是滑鼠被點擊。

在XNA中,他只提供,是否被壓下,是否被放開,並不會紀錄是否先前就被按下等資訊。

以上就是實作滑鼠的地方,滑鼠還有很多地方可以玩,像是滾輪,左鍵,中鍵的滑鼠設定等等。
可以再多玩玩看。