在 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);
}
};
只需要一点帮助。我基本上是 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);
}
};