DirectInput的立即模式与缓冲模式

键盘为了保证实时性,一定要用立即模式!
鼠标可以使用缓冲的,这样可以得到一个连贯的输入状态。
DirectInput 设备以立即模式获取输入信息,例如,如果键盘按键的速度非常快,那么在DirectInput读取数据那一刻之前的案件数据将不能被DirectInput设备读取。与立即模式相对的是缓冲模式,此时设备输入数据即将被放进缓冲区中供DirectInput设备使用。对于游戏开发来说,通常依照键盘和游戏杆的各种按键执行画面的更新,因此,利用DirectInput设备的立即模式来读取它们的输入数据较为适宜。相反在一个画面中鼠标的移动式连贯的,为了在游戏程序可多次连续的鼠标移动量,就需要采用DirectInput的缓冲模式来读取鼠标的输入。

看看Ogre提供的ExampleFrameListener的构造函数声明:
ExampleFrameListener(
                          RenderWindow* win, 
                          Camera* cam, 
                          bool bufferedKeys = false, 
                          bool bufferedMouse = false,
                          bool bufferedJoy = false
)
Keyboard,mouse,joystick默认都是立即模式。
假如需要要对keyboard采取立即模式,对mouse采取缓冲模式,可以这样新建ExampleFrameListener对象,new ExampleFrameListenr(win, cam, false, true);
然后还需要实现一些鼠标的响应函数,例如mousePressed,mouseMouved,mouseReleased.
最终在ExampleFrameListener的构造函数中创建keyboard与mouse的代码如下:
//Create all devices (We only catch joystick exceptions here, as, most people have Key/Mouse)
mKeyboard = static_cast<OIS::Keyboard*>
                      (mInputManager->createInputObject( OIS::OISKeyboard, bufferedKeys ));
mMouse = static_cast<OIS::Mouse*>
                      (mInputManager->createInputObject( OIS::OISMouse, bufferedMouse ));
try {
mJoy = static_cast<OIS::JoyStick*>
                      (mInputManager->createInputObject( OIS::OISJoyStick, bufferedJoy ));
} catch(...) {
        mJoy = 0;
}
代码采取异常方式创建Joy stick很优美!
另有一篇:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值