首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libgdx中的GestureDetector

libgdx中的GestureDetector
EN

Stack Overflow用户
提问于 2013-02-12 16:04:53
回答 2查看 5.6K关注 0票数 7

我是libgdx的新手。我有以下问题。我想为我的游戏做缩放。为此,我的GameStage中有GestureDetectorListener类。

GameStage中,我为GestureDetector编写了以下代码

代码语言:javascript
复制
OrthographicCamera camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
this.setCamera(camera);


GestureDetector gestureDetector = new GestureDetector(20, 0.5f, 2, 0.15f, new GestureDetectorListener());
Gdx.input.setInputProcessor(gestureDetector);

class GestureDetectorListener implements GestureListener {
    float initialScale = 1;

    @Override
    public boolean touchDown(float x, float y, int pointer, int button) {
        initialScale = camera.zoom;
        return true;
    }

    @Override
    public boolean tap(float x, float y, int count, int button) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean longPress(float x, float y) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean fling(float velocityX, float velocityY, int button) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        return true;
    }

    @Override
    public boolean zoom(float initialDistance, float distance) {
        float ratio = initialDistance / distance;
        camera.zoom = initialScale * ratio;
        return true;
    }

    @Override
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2,
            Vector2 pointer1, Vector2 pointer2) {
        // TODO Auto-generated method stub
        return true;
    }

}

我也为我舞台上的演员设置了InputListener,以便拖拽他们。问题是,当我将InputProcessor设置为GestureDetector时,拖动我的Actor不起作用。我想要使用相机和GestureDetector进行缩放,但它不会对拖动产生影响。我该怎么做呢?

有什么需要帮忙的吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-12 22:16:09

CodeNoob走在正确的道路上,但我认为您可能希望以不同的方式构建它。

可以使用InputMultiplexer安装全局GestureListener和舞台的侦听器:

代码语言:javascript
复制
GestureDetector gd = ...
Stage myStage = ...
InputMultiplexer im = new InputMultiplexer(gd, myStage); // Order matters here!
Gdx.input.setInputProcessor(im);

另一件需要注意的事情是输入侦听器中所有boolean方法的返回值。任何返回"true“的多路复用器都会将该事件标记为”已处理“,并且多路复用器不会将该事件传递给它的同级。此外,多路复用器中输入处理器的顺序也会有所不同(因为它可能对底层inputProcessor隐藏事件)。因此,在您的示例中,自动生成的存根返回'true‘,将“吃掉”一堆事件。如果此处理程序是多路复用器中的第一个处理程序,则会对舞台隐藏事件。

票数 8
EN

Stack Overflow用户

发布于 2013-02-12 19:23:41

您需要创建一个InputMultiplexer InputMultiplexer myInputMultiplexer = new InputMultiplexer()

然后将GestureDetector和InputListener添加到InputMultiplexer (myInputMultiplexer.addProcessor())。

最后,必须将多路复用器设置为主InputProcessor,如下所示:Gdx.input.setInputProcessor(myInputMultiplexer)

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

https://stackoverflow.com/questions/14828028

复制
相关文章

相似问题

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