需要一点帮助。我基本上是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坐标。有帮助吗?感谢
答案 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);
}
};