OIS 缓冲与非缓冲输入方式

网上有很多人说过此类问题,可我总觉得有些说法不太合适。于是就自己试验了一下。


下面是笔记:


1. 只有缓冲IO才能用于KeyListener/MouseListener,
   也就是Keyboard::setEventCallback()设置的监听器。

2. 因为缓冲IO时,检测的是按键状态,所以就有按下和释放两个事件。

3. 把IO事件和帧渲染分开,利于管理,但是容易造成冗余。
   可以把MyListenerData设成须共享数据的监听器(如Frame|Key|MouseListener)的友元,在MyListenerData里封装属性。

4.实现类:

   MyListenerData: 跟控制属性相关的数据(注意这是控制信息,并非实体信息)
   MyKeyListener: 跟按键控制相关的操作

   MyMouseListener: 跟鼠标控制相关的操作
   MyFrameListener: 跟每一帧渲染相关的操作


如果把键盘设为非缓冲,那么Keyboard::setEventCallback()设置的监听器就不灵了。同样的,如果把鼠标设置为非缓冲,那么鼠标的回调函数也会失灵。这样只能在真渲染中进行相关控制操作,这易导致类的设计不够清晰。


因为键鼠监听器总是检测按键状态,所以在移动、旋转等过程变化以及按键切换等瞬时变化上和非缓冲及帧渲染事件处理上有所不同。所以,才导致键鼠监听器总是有按下和释放两个事件处理,这就是为了改变状态。而不像frame事件中那样只考虑按键是否按下就可以了。正因为此,才有了frameStated/frameRenderingQueued/frameEnded这三中不同的时间态去做处理。比如,一个变量要在鼠标移动时为1,否则为0,就可以再mouseMoved中设置1,frameRendingQueued中做处理,到frameEnded中设置为0,因为不知道下一帧鼠标是不是还在移动啊。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值