在libGdx上调整大小时发生错误的单击事件

在libGdx上调整大小时发生错误的单击事件,libgdx,Libgdx,我想在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 TextureReg

我想在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是一个带有rendertexture的简单类扩展Actor。 活动开始时运行良好。 但是,当调整帧大小时,当演员按需要拉伸时,单击的坐标不会更新,因此会放错位置


如何使用项目的新大小作为事件的基础来制作阶段?

您需要在应用程序的“调整大小”方法中更新阶段的视口,如下所示:

public void resize(int width, int height) {

    stage.setViewport(stage.getWidth(), stage.getHeight(), false, 0, 0, width, height);

}

您需要在应用程序的“调整大小”方法中更新阶段的视口,如下所示:

public void resize(int width, int height) {

    stage.setViewport(stage.getWidth(), stage.getHeight(), false, 0, 0, width, height);

}

您需要在应用程序的“调整大小”方法中更新阶段的视口,如下所示:

public void resize(int width, int height) {

    stage.setViewport(stage.getWidth(), stage.getHeight(), false, 0, 0, width, height);

}

您需要在应用程序的“调整大小”方法中更新阶段的视口,如下所示:

public void resize(int width, int height) {

    stage.setViewport(stage.getWidth(), stage.getHeight(), false, 0, 0, width, height);

}

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

摄像机项目(矢量3世界点)


这对你有用吗?

我认为你必须使用camera.project()方法来实现这一目的

摄像机项目(矢量3世界点)


这对你有用吗?

我认为你必须使用camera.project()方法来实现这一目的

摄像机项目(矢量3世界点)


这对你有用吗?

我认为你必须使用camera.project()方法来实现这一目的

摄像机项目(矢量3世界点)


这对您有效吗?

对我有效的方法与上面提到的方法类似,但您必须稍微修改一下:

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

您不应该使用Gdx.graphics.width和height,而应该真正使用resize()提供给您的功能。

对我有效的功能与上面提到的类似,但您必须稍微修改它:

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

您不应该使用Gdx.graphics.width和height,而应该真正使用resize()提供给您的功能。

对我有效的功能与上面提到的类似,但您必须稍微修改它:

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

您不应该使用Gdx.graphics.width和height,而应该真正使用resize()提供给您的功能。

对我有效的功能与上面提到的类似,但您必须稍微修改它:

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

您不应该使用Gdx.graphics.width和height,而应该真正使用resize()提供给您的内容。

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