在 Scene2d 中使用 Vector2 的鼠标坐标

Mouse Coordinates using Vector2 in Scene2d

只需要一点帮助。我基本上是 libGDX 的新手。我想做的是使用以下代码块获取鼠标点击的坐标:

  @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        Vector2 coord = stage.screenToStageCoordinates(new Vector2((float)screenX, (float)screenY));
        Actor hitActor = stage.hit(coord.x, coord.y, false);
        return true;
    }

这确实获得了鼠标点击的坐标,但我担心的是,这可能会触发垃圾收集器,因为每次点击都可能创建一个新的 Vector2 坐标。有什么帮助吗?谢谢

在 class 中创建一个包含此变量的 Vector2 字段,然后不用每次点击都制作坐标 vector2,只需使用 .set 中 vector2 字段的方法 class.

如果只是对触地的反应,则无需担心,因为这种情况很少见。如果它是为了触摸拖动,那么可能在非常低端 phone,但可能不是。如果你正处于一个大循环的中间,那么你应该避免它。

只需在您的 class 中创建一个可重复使用的 Vector2 并在每次使用前进行设置。

private final Vector2 tmp = new Vector2();

//...

stage.screenToStageCoordinates(tmp.set(screenX, screenY);
Actor hitActor = stage.hit(coord.x, coord.y, false);

但是,如果您使用的是 Scene2D,则以上所有内容都是不必要的。将 ClickListener 放在您要跟踪的演员上。

actor.addListener(new ClickListener (){
    public void clicked (InputEvent event, float x, float y) {
        doSomethingWithActor(event.listenerActor);
    }
};