ActorGestureListener Fling未注册

时间:2015-07-06 10:59:52

标签: java input libgdx

我无法让我的应用程序在特定的actor上注册一个fling动作。向演员添加一个简单的tap并检查表格上的点击时我没有问题。为轻弹做同样的事但它不起作用。我错过了什么吗?看看网上到处都没有关于ActorGestureListener的信息。

我的代码:

    mainLeftTable.setTouchable(Touchable.enabled);
    mainLeftTable.addListener(new ActorGestureListener(){
        @Override
        public void fling(InputEvent event, float velocityX, float velocityY, int button) {
            System.out.println(velocityX + " - " + velocityY);
        }
    });

使用此代码没有任何反应,我看不到我缺少的东西

供参考,设置tap适用于以下代码:

    mainLeftTable.setTouchable(Touchable.enabled);
    mainLeftTable.addListener(new ActorGestureListener(){
        @Override
        public void tap(InputEvent event, float x, float y, int count, int button) {
            System.out.println("tapped");
        }

我的舞台是输入处理器。

更新

显然,ScrollPane中有些东西搞砸了,如果我在桌面上禁用了ScrollPane,那就会出现问题。为什么是这样?我需要滚动

2 个答案:

答案 0 :(得分:1)

您是否在告诉Gdx应用程序有关收听者的信息?也就是说,呼叫:

Gdx.input.setInputProcessor(yourListener)

告诉应用程序你的新听众?如果您有多个侦听器,则可能需要使用InputMultiplexer。不确定如何使用“tap”侦听器设置其余代码。

我进行了快速搜索并浏览了以下教程,可能会举例说明您可以重新使用代码:

http://www.gamefromscratch.com/post/2013/10/24/LibGDX-Tutorial-5-Handling-Input-Touch-and-gestures.aspx

编辑:

根据评论,这是一个有效的示例应用程序。我想这就是你要做的事。

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener;

public class Fling implements ApplicationListener {
   private Texture music;
   private SpriteBatch batch;
   private OrthographicCamera camera;
   private Stage stage;

   @Override
   public void create() {
      camera = new OrthographicCamera();
      camera.setToOrtho(false, 800, 480);
      batch = new SpriteBatch();

      music = new Texture(Gdx.files.internal("img/sprites/buttons/music_off.png"));
      Image image = new Image(music);
      Table actor = new Table();
      actor.debug();
      actor.add(image).width(105).height(105);
      actor.setX(100);
      actor.setY(100);
      actor.setTouchable(Touchable.enabled);
      actor.addListener(new ActorGestureListener(){
          @Override
          public void fling(InputEvent event, float velocityX, float velocityY, int button) {
              System.out.println(velocityX + " - " + velocityY);
          }

          @Override
          public void tap(InputEvent event, float x, float y, int count, int button) {
              System.out.println("tapped");
          }

          @Override
          public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
              System.out.println("touchdown");
          }           

      });
      stage = new Stage();
      stage.addActor(actor);

      Gdx.input.setInputProcessor(stage);
   }

   @Override
   public void render() {
       stage.draw();
   }

   @Override
   public void dispose() {
      music.dispose();
      batch.dispose();
   }

   @Override
   public void resize(int width, int height) {
   }

   @Override
   public void pause() {
   }

   @Override
   public void resume() {
   }

}

当我跑步时,我看到: working fling

答案 1 :(得分:1)

我遇到了同样的问题,在检查了ScrollPane的源代码之后,我注意到ActorGestureListener已经处理了fling事件并自动取消了触摸焦点。

只需在ScrollPane上调用setCancelTouchFocus(false),您就可以自己处理fling事件。至少这解决了我的问题。