我想在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按照需要进行拉伸时,点击的坐标不会更新,从而放错位置。
如何使用新项目的大小作为事件的基础来创建舞台?
答案 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);
这适合你吗?