Ogre键盘控制失效问题

上个周末还没问题的代码,周一来了编译发现键盘控制出了问题,方向键按下没有反应,只有长时间按下的时候镜头偶尔会移动一下,也就是要N帧才能响应到一次键盘操作。

 

what's wrong? 谁动了我的代码?

 

F5,调试起来,发现键盘消息相应没有任何问题,每次都能捕获到,而偏移量mTranslateVector的值也确实有变化,但是到了movecamera的时候mTranslateVector就变为零了!那问题出在哪呢?

 

静下来仔细回想下,期间我的确没有更改过代码,那问题出在哪呢?继续调试,发现在ogre 的 ExampleFrameListener.h 文件的frameStarted函数里面有这样一句

 


  1. //Check if one of the devices is not buffered
  2.   if( !mMouse->buffered() || !mKeyboard->buffered() || !buffJ )
  3.   {
  4.    ...
  5.    mTranslateVector = Ogre::Vector3::ZERO;
  6.    }

 而且每次都会执行到这个赋值语句,是这条语句将之前的按键响应赋值清零了,这样再进入到movecam函数的时候,速度为0,自然镜头就不会移动了。注释掉这一句,编译,加载场景,镜头移动正常,问题暂时解决。

 

但是?the devices is not buffered ?我使用的是缓冲输入,而且按键一直被按下,居然在程序中被判断成为not buffered,肯定是某个地方出了问题。

 

既然软件没问题,会不会是硬件上的改动导致的?我再回想,周末的时候为了玩街机,装了个游戏手柄,会不会和这个有关系呢?

 

立马动手,拔下手柄,取消掉刚才的注释,编译运行。OK!一切正常!

 

为了更精确的找到问题原因,我把手柄拿到另一台机器上装好,然后再跑程序,发现一切正常。

 

对比下两台机器,发现唯一不同的就是,第一台出问题的机器,键盘鼠标都是USB接口的,而手柄正好也是。

 

好了,问题到此,大致可归结为,当系统使用多个usb输入设备时,会对ois的缓冲输入的缓冲判断造成影响,导致一些逻辑上的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值