5

我在 libgdx 中使用 scene2d 时遇到问题。我在任何地方都找不到允许我检查演员是否被触摸的方法。我只能找到告诉我演员是否被触摸或释放的方法。在我的游戏中,当actor被按住时,每一帧都应该做一些事情,而不仅仅是我手指放在它上面的那一刻。当我松开手指时,我想停止这些事情。

4

3 回答 3

4

您可以在您的InputListener. 创建一个布尔字段isTouched,当你得到 a 时设置为 true,当你得到 a 时设置为touchDownfalse touchUp。我在自上而下的射击游戏中使用了这种方法,效果很好。

于 2013-09-28T23:13:48.953 回答
3

您可以通过在渲染方法中执行此操作来检查您的输入

gdx.app.log("","touched"+touchdown);

首先设置输入处理器..

Gdx.input.setInputProcessor(mystage);

然后您可以在 create 方法中将输入侦听器添加到您的演员

optone.addListener(new InputListener() {
        @Override
        public void touchUp(InputEvent event, float x, float y,
                int pointer, int button) {
                boolean touchdown=true;
            //do your stuff 
           //it will work when finger is released..

        }

        public boolean touchDown(InputEvent event, float x, float y,
               int pointer, int button) {
               boolean touchdown=false;
            //do your stuff it will work when u touched your actor
            return true;
        }

    });
于 2013-10-05T07:18:57.710 回答
0

我有类似的问题,而且我需要知道当前坐标;所以我解决了这样的问题:

首先我们扩展标准监听器:

class MyClickListener extends ClickListener {
    float x, y = 0;

    @Override
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        this.x = x;
        this.y = y;
        return super.touchDown(event, x, y, pointer, button);
    }

    @Override
    public void touchDragged(InputEvent event, float x, float y, int pointer) {
        this.x = x;
        this.y = y;
        super.touchDragged(event, x, y, pointer);
    }
}

然后向 Actor 添加一个实例:

class MyActor extends Actor {
    private final MyClickListener listener = new MyClickListener();
    MyActor() {
        addListener(listener);
    }
    ...
}

在 draw (act) 方法中使用以下内容:

if (listener.getPressedButton() >= 0)
    System.out.println(listener.x + "; " + listener.y);
于 2017-03-02T08:31:45.603 回答