我不能让我的应用程序在某个特定的演员上注册一次风流韵事。当向参与者添加一个简单的tap并检查表上的点击时,我没有问题。为flick做同样的事情,但它不起作用。我是不是遗漏了什么?在网上随处可见,没有多少关于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,fling就能正常工作。为什么会这样呢?我需要卷轴
发布于 2015-07-06 12:43:44
你是在告诉Gdx应用程序关于听者的事吗?也就是说,打电话:
Gdx.input.setInputProcessor(yourListener)告诉你的新听众的应用程序?如果您有多个侦听器,则可能需要使用InputMultiplexer。不确定如何用“点击”侦听器设置其余的代码。
我进行了快速搜索,并阅读了以下教程,这可能会给出一个示例,您可以重新调整代码的用途:
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() {
}}
当我运行它时,我发现:

发布于 2016-06-14 15:02:49
我也遇到了同样的问题,在检查了ScrollPane的源代码之后,我注意到ActorGestureListener已经处理了抛出事件,并自动取消了触摸焦点。
只需在您的setCancelTouchFocus上调用ScrollPane (False),您就可以自己处理fling事件。至少这为我解决了问题。
https://stackoverflow.com/questions/31244141
复制相似问题