附录1:LibGdx输入事件
2021-06-18 本文已影响0人
大旺旺的弟弟小旺旺
事件传递从不同平台的事件传递给上层使用,无论是android,windows,所有的操作都存在一个线程中,绘制事件处理,都逃不出一个线程。在android平台,会根据sdk分别创建出两个不同类型的Graphics。二者的区别就是GLSurfaceView18使用的是SurfaceView,自己创建EGL,SurfaceView20使用的是GLSurface.最终都会执行一个onDrawFrame的方法。这个方法执行刷新操作。
传递过程
android的事件传递,通过
app.getInput().processEvents();
传递给应用程序。android事件通过这个getInput(),但是getInput是什么,首先它是整个游戏的一个事件操作着,事件是从view来,它和view的关系是在创建input实例的时候建立的。
if (view instanceof View) {
View v = (View)view;
v.setOnGenericMotionListener(this);
}
view上的事件通过
- 按钮监听
boolean onKey(View v, int keyCode, KeyEvent event);
- 触摸事件
boolean onTouch(View v, MotionEvent event);
将android的事件放入到数组中,当每一帧刷新的时候遍历事件数组:
for (int i = 0; i < len; i++) {
KeyEvent e = keyEvents.get(i);
currentEventTimeStamp = e.timeStamp;
switch (e.type) {
case KeyEvent.KEY_DOWN:
processor.keyDown(e.keyCode);
keyJustPressed = true;
justPressedKeys[e.keyCode] = true;
break;
case KeyEvent.KEY_UP:
processor.keyUp(e.keyCode);
break;
case KeyEvent.KEY_TYPED:
processor.keyTyped(e.keyChar);
}
usedKeyEvents.free(e);
}
其他事件也类似。
总结一下:
游戏中需要拿到事件的处理,就需要从android端(以安卓为例)拿到事件,我们先将android的事件收集起来放入到一个数组中(集合中),然后每次绘制刷新的时候,遍历数组,通过回调的方式,将事件传递给游戏。
包含那些事件
包含的输入事件包含按钮、触摸
- 按钮(键盘)
包含了键盘按下、弹起、按键类型 - 触摸事件
包含了按下、抬起、触摸拖动、触摸滑动、触摸滚动
这里android端就基本结束了。下面就在游戏舞台中去使用了。