1.如何让Stage接受到触摸事件:

   // 注册监听器

    InputMultiplexer inputMultiplexer = new InputMultiplexer(getStage(),new GestureDetector(this));

    Gdx.input.setInputProcessor(inputMultiplexer);

此处第二个为手势的监测。(滑动,缩放等)

2.这里特殊说明一下,所有事件的处理都是绘制之前的。

Gdx.input.justTouched()

Gdx.input.isTouched()

上面两个方法都是用来获取屏幕是否有点击(TouchDown操作)。

如果你想通过上面方法,进行Screen的切换操作,可不是个好主意。

      if (Gdx.input.justTouched()) {

            // If the screen is touched , go to the next screen

        }

切换到第二个Screen的时候,第二个Screen会接受到touchUp事件,如果一些变量涉及到touchDown处理就出错。

原因如下:

         第一个Screen处理down事件->切换screen,screen注册了事件接收器,进行绘制处理->此时已经是第二个Screen在显示,就会处理up事件了。

        一个事件,起于TouchDown,终于TouchUp!

PS:如果想通过点击切换Screen,可以通过某个控件,如Image点击来实现。

Image screenBg.... 背景层,和屏幕大小一致

screenBg.addListener(new InputListener() {

        @Override

        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {

            // 只有返回true,才会有touchUp事件的触发。

            return true;

        }

        @Override

        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {

            if (条件触发) {

                CHGame.getInstance().setScreen(nextScreen);

            }

        }

    });

发表评论

邮箱地址不会被公开。 必填项已用*标注