键盘为了保证实时性,一定要用立即模式!
鼠标可以使用缓冲的,这样可以得到一个连贯的输入状态。
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很优美!
另有一篇:
分享到:
相关推荐
6. **事件模型与轮询模型**:DirectInput支持两种模式来处理设备输入,事件模型利用Windows消息队列,而轮询模型则主动检查设备状态。选择哪种取决于游戏的需求,如实时性要求高的游戏通常使用轮询。 7. **缓冲区...
然后,设置设备的 cooperativity level(合作级别),以确定DirectInput与其他输入处理方式的关系。通常使用`DICONFIGURATIONFLAGS_EXCLUSIVE`标志,使得程序独占手柄的输入。 设备准备就绪后,你需要初始化设备...
本文将深入探讨如何使用C#语言,结合DirectInput技术来实现对手柄的操作,包括振动功能。 DirectInput是Microsoft DirectX库的一部分,主要用于获取高级游戏设备的数据,如键盘、鼠标以及游戏手柄等。它提供了一个...
SharpDX是一个强大的开源库,它为.NET开发者提供了直接访问 DirectX API 的能力,包括DirectInput,这使得我们可以直接与游戏控制器(如手柄)进行交互。 DirectInput是Microsoft DirectX的一部分,主要用于获取低...
4. **设置合作模式**:通过调用 SetCooperativeLevel() 方法,设置 DirectInput 与窗口的合作级别。DISCL_NONEXCLUSIVE 表示与其他输入设备共享访问,DISCL_FOREGROUND 表示在前台窗口中工作。 5. **设定缓冲区大小...
8. **事件驱动(Event-driven)模型**:DirectInput支持事件驱动模式,当设备状态改变时,会触发窗口消息。开发者需要注册设备事件处理函数,并通过`IDirectInputDevice8::SetEventNotification`开启事件通知。 9. ...
DirectInput是微软Windows API的一部分,主要用于游戏和其他交互式应用程序与硬件设备,尤其是输入设备(如键盘、鼠标、游戏控制器)的交互。这个封装类是为了简化DirectInput的使用,让开发者能够更方便地在程序中...
此外,DirectInput还提供了高级特性,如缓冲区、设备事件和自定义设备输入布局。缓冲区允许应用程序一次性获取多帧的输入数据,设备事件则能让程序在设备状态变化时得到通知,而自定义输入布局则支持非标准设备的...
1. 初始化DirectInput:在MFC应用程序的初始化阶段,你需要创建一个`IDirectInput8`接口实例,并设置其CoInitializeEx以启用多线程COM模式。 2. 创建键盘设备:使用`IDirectInput8::CreateDevice`方法创建一个`...
1. 初始化DirectInput:首先,你需要创建一个DirectInput对象,然后设置它与你的应用程序关联。这可以通过调用`DirectInput8Create`函数实现,传入应用程序的句柄和DirectInput版本信息。 2. 创建键盘设备:接下来...
2. **缓冲输入**:DirectInput支持缓冲,可以存储一段时间内的输入数据,防止因为系统繁忙而丢失输入事件。 3. **设备枚举**:开发者可以通过DirectInput获取系统中所有可用的输入设备,并选择合适的设备进行交互。...
这通常涉及创建一个DirectInput对象,并将其与应用程序的主窗口关联,这样DirectInput就能接收到来自设备的输入事件。代码中可能会包含类似以下的步骤: ```cpp LPDIRECTINPUT8 directInput; HRESULT hr = Direct...
然后,使用SetCooperativeLevel设置应用程序与DirectInput的交互级别。 3. 获取输入数据:在每个帧的循环中,调用IDirectInputDevice8::Acquire获取设备所有权,如果成功则可以读取输入数据。使用...
总的来说,这个源码包提供了一个学习和实践DirectInput与RawInput交互的宝贵资源,对于想要深入理解Windows系统输入处理机制的开发者来说,是一个非常有价值的参考。通过分析和修改这些源码,你可以更好地掌握这两种...
1. 初始化DirectInput:首先,程序需初始化DirectInput环境,创建一个DirectInput实例,并设置兼容性模式为DirectX 8或更高版本,以确保兼容性。 2. 创建游戏杆设备对象:接着,程序需要查找并创建对应的游戏杆设备...
在Windows平台下使用DirectInput8接口,对joystick进行编程。 共2个文件:《DirectInput8开发手册》和Joystick.cpp(代码) 编译器:Visual Studio 2017 主要包含头文件: #include <dinput.h> #include <dinputd.h>
DirectInput和Xinput是两种微软开发的API,用于在Windows平台上与游戏手柄和其他输入设备交互,特别是针对游戏场景。这两个API各有特点,各有适用范围,对于开发者来说,理解它们的工作原理和区别至关重要。 Direct...
总之,这个"DirectInput基于单文档 捕捉键盘输入信息并显示"的程序是一个很好的学习案例,它演示了如何在MFC环境下利用DirectInput与键盘交互,同时展示了如何将输入信息实时反映到视图上。这种技术对于需要高度响应...
Direct Input 7 Joystick Class是微软DirectX 7中用于游戏控制器输入的一种接口,它允许开发者直接从硬件设备,如游戏杆、摇杆或者飞行摇杆等获取输入数据。这个类为游戏开发者提供了低延迟、高精度的输入控制,使得...