在libGdx上调整大小时,单击事件不正确

时间:2014-04-15 18:40:58

标签: 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 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。 活动在开始时工作正常。 但是在调整框架大小时,当Actor按照需要进行拉伸时,点击的坐标不会更新,从而放错位置。

如何使用新项目的大小作为事件的基础来创建舞台?

3 个答案:

答案 0 :(得分:2)

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

public void resize(int width, int height) {

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

}

答案 1 :(得分:1)

对我有用的东西与上面提到的相似,但你必须稍微修改一下:

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

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

答案 2 :(得分:0)

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

camera.project(Vector3 worldPoint);

这适合你吗?