首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActorGestureListener Fling不注册

ActorGestureListener Fling不注册
EN

Stack Overflow用户
提问于 2015-07-06 10:59:52
回答 2查看 574关注 0票数 1

我不能让我的应用程序在某个特定的演员上注册一次风流韵事。当向参与者添加一个简单的tap并检查表上的点击时,我没有问题。为flick做同样的事情,但它不起作用。我是不是遗漏了什么?在网上随处可见,没有多少关于ActorGestureListener的信息。

我的守则:

代码语言:javascript
复制
    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适用于以下代码:

代码语言:javascript
复制
    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,fling就能正常工作。为什么会这样呢?我需要卷轴

EN

回答 2

Stack Overflow用户

发布于 2015-07-06 12:43:44

你是在告诉Gdx应用程序关于听者的事吗?也就是说,打电话:

代码语言:javascript
复制
Gdx.input.setInputProcessor(yourListener)

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

我进行了快速搜索,并阅读了以下教程,这可能会给出一个示例,您可以重新调整代码的用途:

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

编辑:

基于这些评论,这里有一个示例应用程序可以工作。我想这就是你想要做的。

代码语言:javascript
复制
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() {
   }

}

当我运行它时,我发现:

票数 1
EN

Stack Overflow用户

发布于 2016-06-14 15:02:49

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31244141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档