libGdx专题

附录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端就基本结束了。下面就在游戏舞台中去使用了。

上一篇下一篇

猜你喜欢

热点阅读