Libgdx 在Scene2d中使用Vector2的鼠标坐标
只是需要一点帮助。我对libGDX基本上是新手。我尝试使用以下代码块获取鼠标点击的坐标: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
@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。在每一帧中创建新对象通常不是一个好主意,但是没有人会长时间点击每一帧。谢谢你的帮助!)谢谢你的帮助!:)