鼠标在Scene2d中使用Vector2进行坐标

时间:2016-04-30 15:25:44

标签: 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));
        Actor hitActor = stage.hit(coord.x, coord.y, false);
        return true;
    }

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

2 个答案:

答案 0 :(得分:1)

在包含此变量的类中创建一个Vector2字段,然后不要在每次点击时使用coord vector2,只需使用类中vector2字段的.set方法。

答案 1 :(得分:1)

如果它只是为了响应触地,不需要担心它,因为它很少见。如果是触摸拖动,那么可能是在真正的低端手机上,但可能不是。如果你处于一个大循环的中间,那么你应该避免它。

只需在班级中创建一个可重复使用的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上。

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