我无法让我的应用程序在特定的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,那就会出现问题。为什么是这样?我需要滚动
答案 0 :(得分:1)
您是否在告诉Gdx应用程序有关收听者的信息?也就是说,呼叫:
Gdx.input.setInputProcessor(yourListener)
告诉应用程序你的新听众?如果您有多个侦听器,则可能需要使用InputMultiplexer。不确定如何使用“tap”侦听器设置其余代码。
我进行了快速搜索并浏览了以下教程,可能会举例说明您可以重新使用代码:
编辑:
根据评论,这是一个有效的示例应用程序。我想这就是你要做的事。
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 :(得分:1)
我遇到了同样的问题,在检查了ScrollPane的源代码之后,我注意到ActorGestureListener已经处理了fling事件并自动取消了触摸焦点。
只需在ScrollPane上调用setCancelTouchFocus(false),您就可以自己处理fling事件。至少这解决了我的问题。