unigine 鼠标 键盘 相关问题

使用unigine版本2.5.1

unigine中鼠标键盘事件是由App类来与操作系统交互的,事件的交互只是将事件通知到unigine。具体怎么用,怎么响应,用来产生什么效果,还是需要通过显示调用api或者自定义逻辑。
unigine 默认的使用鼠标事件是在core/sripts/system/system.h update中。在2.7.3里面有一个下面截图的说明。设置下面两者中的一种,就能让unigine不响应鼠标事件。


在VS项目中,unigine使用默认的内部的一个继承于App类的windows窗体程序,在Qt项目中,为了与qt ui进行兼容,unigine有一个qt ui框架,由继承于App类的AppQt类来进行操作。

App中通过buttonPress(int key),buttonRelease(int key),mouseButtonPress(int key),mouseButtonRelease(int key)  等函数来将信号存储到App中。

ControlsApp和Gui两个类通过显示调用App中的查询函数并显示调用对应类的控制函数来对信号进行处理和响应。
需要注意的是,所有unigine项目中都有一个unigine.cpp文件,该文件调用core/scripts/system/system.h(该文件主要作用就是按esc弹出辅助窗口)。这个文件中的update中有unigine一套默认的ControlsApp和Gui对鼠标键盘的处理和响应简单机制,这里面 就展示了如何显示查询和显示调用,让人感觉主窗体的时候无缝切换。如果需要比较自由的鼠标键盘响应方式,需要结合App,ControlsApp和Gui甚至设置player的control 来进行操作。另外,unigine中GamePlayer只对ControlsApp作出响应,其他的control,无响应(可能是一个内部的对control的执行顺序导致的问题)。

 unigine中现有的响应鼠标相关的类有ControlsApp,Gui。
在2.5及之前的版本中,unigine的脚本的unigine.cpp 会调用在core/scripts/system/system.h 来回切换这三个类对鼠标的控制。
如果需要单独测试这些功能,需要先将脚本的unigine.cpp中system相关的函数注释掉。

ControlsApp的作用是控制gamePlayer的行为。对GamePlayer,手动设置的controls是无效的。
Gui::get()->setMouseEnable(1),鼠标会一直显示。
Gui::get()->setMouseGrab(1),使gui接收所有鼠标事件。
App::get()->setMouseShow(1)使鼠标显示时显示系统鼠标,否者显示unigine默认的或自定义鼠标。
App::get()->setMouseGrab(1) 使App接收所有的鼠标相关的事件。实际表现时,vs中使鼠标无法脱离unigine画面范围,qt中与ControlsApp->setMouseEnable(1)结合使鼠标限制在中心(实际上是在ControlsApp的update中设置鼠标位置到中心)。如果此时ControlsApp::get()->getMouesEnabled()==1 &&Gui::get()->getMouseEnabled()==0 && App::get()->getMouseShow() == 0 ,鼠标不会显示。如果ControlsApp::get()->getMouesEnabled()==1 &&Gui::get()->getMouseEnabled()==0 && App::get()->getMouseShow() == 1 ,鼠标显示,并一直锁定在中心。ControlsApp::get()->setMouseEnable(1)使ControlsApp接收鼠标相关的事件。并且让鼠标移动产生控制。可通过setmousesensitive 来消除鼠标移动的控制。如果此时Gui::get()->getMouseEnabled()==0 && App::get()->getMouseShow() == 0,鼠标不会显示。

对于ControlsApp中鼠标移动产生的控制是在Controls 私有函数中的update中进行操作的。如下可以看到qt中调试的调用堆栈。

unigine在qt中实现了一套C++代码的将渲染出的画面显示到windows gui上的代码。而vs中的则是完全的内部实现。

可以看到在unigine/core/script/system/system.h 中,通过对这三个 对象的和状态查询等操作,来让unigine最原始的demo的产生无障碍的鼠标键盘控制效果。

对于非gameplayer 的控制,可以自定义control来进行操作。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值