[GEiv]第三章:输入接口 所谓“控制感”
来源:互联网 发布:数据库decimal类型 编辑:程序博客网 时间:2024/05/16 07:30
第三章:输入接口
所谓“控制感”
这篇文章主要介绍使用输入接口对图元进行控制。
[游戏当中的输入分类]
1.主动检索式,在Serial中检测按键的状态,作出不同的反应,这个适用于控制要求及时、快速的情况,例如控制游戏角色等。
2.被动驱动,类似于AWT的事件回调,用于控制要求频度不高,但往往是单次调用的过程,例如游戏菜单的控制。
二者谁也无法替代谁,使用回调控制角色,会有很大的滞后感;而使用主动检索驱动UI菜单,则会敏感度过高,稍微一按就飞出好几项之后了。
[主动检索式]
例子:
@Overridepublic void Serial(int arg0) {if(UES.getKeyStatus(KeyEvent.VK_LEFT)){rect.setDx(rect.getDx() - 3);}if(UES.getKeyStatus(KeyEvent.VK_RIGHT)){rect.setDx(rect.getDx() + 3);}if(UES.getKeyStatus(KeyEvent.VK_UP)){rect.setDy(rect.getDy() - 3);}if(UES.getKeyStatus(KeyEvent.VK_DOWN)){rect.setDy(rect.getDy() + 3);}}
将第二章动态绘制中的Serial改写如上,运行的结果就是可以使用键盘的上下左右控制绿色矩形移动。
API介绍:
UES:boolean getKeyStatus(int keyCode);
keyCode是键盘按键对应的ascii码,但是我们不需要去记忆整数码,可以使用KeyEvent.VK_键盘字母 的格式进行引用。
该方法返回此时键盘的按键状态,若为按下,则返回true,否则为false;
除去键盘,鼠标也有类似的API:
UES.getMouseButtonStatus(arg0),它可以获得当前鼠标的按钮状态,1,2,3在本人的设备上分别对应左键、中键(滚轮按下)、右键;
UES.getCrtMouseX(),UES.getCrtMouseY()则返回当前鼠标位置。
=====================================================
[被动驱动]
被动驱动的实现就没有上面简单了。
以键盘为例:
[interface geivcore.KeyFactor]
KeyFactor接口:所有响应键盘回调的类需要实现KeyFactor接口,它包括了三个方法:
public void setKeyListener(KeyListener keyListener);
public void removeKeyListener();
public void keyFactor(int keyCode,boolean ispressed);
如果需要响应键盘的类没有继承其他类,则可选择继承geivcore.DefaultFactor类,进行默认的键盘响应实现。
[interface geivcore. KeyListener]
KeyListener接口:所有处理回调的逻辑实现自该接口,该接口只有一个方法:
public void doKeyBord(KeyFactor whom,intkeyCode,boolean ispressed);
whom是响应的KeyFactor对象,keyCode是按键对应的ascii码,ispressed标识着是按下还是抬起。
在实现了上两个接口后,使用UES.pushKeyBoardIO(KeyFactor factor)方法,将KeyFactor压入键盘IO的栈顶,我们的键盘指令会始终传递给栈顶的KeyFactor,这是为了适应传统的UI系统。
*注意,虽然KeyFactor、KeyListener与UES键盘栈系统被保留到高层,允许开发者自己去实现,但这一过程确实有些复杂,因此在开发工具集中留有Component类作为UI组件工具,也有AutoList类用于从XML文件中构架菜单结构,在工具类的介绍章节里会详细介绍。
[总结]
介绍了主动监测与被动回调两种输入方案,其中被动驱动的实现较为复杂,因此建议尽量使用工具类中的现成组件。
- [GEiv]第三章:输入接口 所谓“控制感”
- 我之所谓第三道路
- 第三章 流程控制
- 第三章 控制语句
- 第三章 接口层
- [GEiv]第二章:动态绘制 让画面动起来
- [GEiv]第四章:图元详解(一) 文字详解
- [GEiv]第四章:图元详解(二) 实用方法
- [GEiv]第五章:个体集群 虚假的分配与释放
- [GEiv]第六章:粒子特效 绚丽的火焰与爆炸
- [GEiv]第七章:着色器 高效的GPU渲染方案
- 第三章 VB控制结构
- 第三章 流程控制 java
- itpt_TCPL 第三章:控制流
- [GEiv]JavaSE 游戏引擎Geiv简介
- 控制输入
- 输入控制
- 接口控制
- ImageLoader配置在非WiFi状态下不下载图片
- 新手上路
- [leetcode] Edit Distance
- 随机化的快速排序
- HDU-#5012 Dice(BFS)
- [GEiv]第三章:输入接口 所谓“控制感”
- cuda二维数组从host到device(未完待续)
- allegro大十字光标设置方法
- 中国玩家利用虚拟币节点技术构建去中心化的P2P影子网络BitNet
- MongoDB 如何使定制电子商务变得简单
- stcmp源码分析
- 解决Win7访问Windows 2003、XP共享慢的问题
- TaskOne YYJ学java
- 【搜索】 HDU 5012 Dice