美文网首页libGdx专题
附录1:LibGdx输入事件

附录1:LibGdx输入事件

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-06-18 07:11 被阅读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端就基本结束了。下面就在游戏舞台中去使用了。

    相关文章

      网友评论

        本文标题:附录1:LibGdx输入事件

        本文链接:https://www.haomeiwen.com/subject/hqucyltx.html