Libgdx 在Scene2d中使用Vector2的鼠标坐标

Libgdx 在Scene2d中使用Vector2的鼠标坐标,libgdx,scene2d,Libgdx,Scene2d,只是需要一点帮助。我对libGDX基本上是新手。我尝试使用以下代码块获取鼠标点击的坐标: @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { Vector2 coord = stage.screenToStageCoordinates(new Vector2((float)screenX, (float)screenY)); Ac

只是需要一点帮助。我对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;
    }

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

在包含此变量的类中创建一个
Vector2
字段,然后不要每次单击都生成坐标向量2,只需使用类中Vector2字段的
.set
方法。

在包含此变量的类中创建一个
Vector2
字段,然后不要每次单击都生成坐标向量2,只需使用类中vector2字段的
.set
方法。

如果它只是对触地的响应,则无需担心,因为它非常罕见。如果是为了触摸拖动,那么可能是在真正的低端手机上,但可能不是。如果你处于一个大循环的中间,那么你应该避免它。 只需在类中创建一个可重用的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);
    }
};

如果这只是对触地的回应,那么就不必担心,因为这是非常罕见的。如果是为了触摸拖动,那么可能是在真正的低端手机上,但可能不是。如果你处于一个大循环的中间,那么你应该避免它。 只需在类中创建一个可重用的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);
    }
};

我不会担心垃圾收集器。如果你应该这样做,那么你最好在你的游戏上放一个RSI警告:D。通常在每一帧创建新对象是个坏主意,但是没有人会长时间点击每一帧。我不会担心垃圾收集器。如果你应该这样做,那么你最好在游戏中添加一个RSI警告:D。在每一帧中创建新对象通常不是一个好主意,但是没有人会长时间点击每一帧。谢谢你的帮助!)谢谢你的帮助!:)