在XNA中,输入有3中方式,键盘,鼠标,xbox的手柄。2中模式,数字方式和模拟方式。
数字方式 有2个可能的状态,开或者关,用boolean来表示,xbox的手柄上的start键或者时间keyboard的按键。
模拟方式 产生一个范围值,xbox的手柄上的摇杆和mouse的移动,可以用很多种方式表示这个范围值。在xbox上用-1.0 ~ 1.0的float值表示摇杆的值;
接受键盘输入, 要先创建一个KeyBoardState的对象的句柄,再GetState(),KeyBoard.GetState().
接受鼠标输入, 要先创建一个MouseState的对象的句柄,再GetState(),Mouse.GetState().
没有xbox, 不操心。
先说鼠标输入,Mouse.GetState()得到当前鼠标的状态,包括LeftButton,RightButton,MiddleButton,ScrollWheelValue,X,Y,XButton1,XButton2。其中X,Y返回的是坐标值(int型)
LeftButton,RightButton,MiddleButton,ScrollWheelValue,Xbutton1,Xbutton2返回的是Button的状态(state),Pressed和Released。 确定Button的状态需要一个ButtonState枚举(enumeration)
ButtonState buttonState = Mouse.GetState().LeftButton;
buttonState == ButtonState.Prssed 用来判断鼠标左键是否按下。
可以在游戏初始化的时候得到鼠标的状态(oldButtonState),一般鼠标的按键状态为Released。 当按下鼠标键的时候后,鼠标状态产生变化,新鼠标状态(newButtonState)为Pressed。可以用这个状态来确定鼠标是否是第一次按下,
if (newButtonState == ButtonState.Pressed && oldButtonState == ButtonState.Released)
{
mouseX = current_mouse.X;
mouseY = current_mouse.Y;
oldButtonState = ButtonState.Pressed;//记得给oldButtonState赋值。不然一直以为是第一次按下
}
if (newButtonState == ButtonState.Released)
{
oldButtonState = ButtonState.Released;//在此时重新恢复初始值。
}
键盘的输入基本和WindowApplication 一样,只是要用到KeyBoard.GetState(),有两个重要函数,IsKeyDown(),IsKeyUp(), 配合Keys枚举(Eunmeration),来判断是那个键被按下或是抬起,
在Keys枚举中有键盘上所有的键。
KeyboardState newState = Keyboard.GetState();
newState.IsKeysDown(Keys.Space);//判断空格键按下
阅读(1197) | 评论(0) | 转发(0) |