摘要:實作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中,他只提供,是否被壓下,是否被放開,並不會紀錄是否先前就被按下等資訊。
以上就是實作滑鼠的地方,滑鼠還有很多地方可以玩,像是滾輪,左鍵,中鍵的滑鼠設定等等。
可以再多玩玩看。