【问题标题】:Incorrect click event when resize on libGdx在 libGdx 上调整大小时单击事件不正确
【发布时间】:2016-12-03 06:52:46
【问题描述】:

我想在 libGDX 中使用 scene2D 来检测对象的点击。

我有这个简单的游戏示例:

Stage stage;

@Override
public void create()
{      
    this.stage = new Stage(1280, 720, true);
    MyActor actor = new MyActor();

    Gdx.input.setInputProcessor(stage);

    actor.setTexture(new TextureRegion(new Texture(Gdx.files.internal("plateau.jpg"))));
    actor.setScale(0.1f);

    stage.addActor(actor);        

    actor.addListener(new InputListener()
    {
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
        {
            System.out.println("down"+Math.random());
            return true;
        }
    });
}

@Override
public void render()
{
    stage.act();
    stage.draw();
}

MyActor 是一个使用渲染纹理扩展 Actor 的简单类。 该事件在开始时运行良好。 但是在调整框架大小时,当 Actor 被拉伸时,点击的坐标没有更新,因此放错了位置。

如何使用新尺寸的物品作为活动的基础来制作舞台?

【问题讨论】:

    标签: libgdx


    【解决方案1】:

    您需要在应用程序的 resize 方法中更新舞台的视口,如下所示:

    public void resize(int width, int height) {
    
        stage.setViewport(stage.getWidth(), stage.getHeight(), false, 0, 0, width, height);
    
    }
    

    【讨论】:

    • 根据他使用的libgdx版本,可能必须是stage.getViewport().update(Gdx.graphics.width, Gdx.graphics.height, true)
    • 您的解决方案有效;但是他们调整了视口的大小,使精灵保持相同的大小,并且我的布局超出了框架。我需要实际拉伸图像,使不同尺寸的游戏布局相同。
    • 我不确定我是否能提供帮助,上面的代码直接来自我的游戏,它在调整大小时确实会拉伸所有内容。
    【解决方案2】:

    对我有用的和上面提到的类似,但你必须稍微修改一下:

    public void resize(int width, int height) {
        stage.getViewport().update(width, height);
    }
    

    你不应该使用 Gdx.graphics.width 和 height 而是真正使用 resize() 提供给你的东西。

    【讨论】:

      【解决方案3】:

      我认为你必须为此使用 camera.project() 方法。

      camera.project(Vector3 worldPoint);

      这对你有用吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多