我正在使用 PlayN 构建一个涉及石头的游戏,用户必须在物理世界中移动(使用重力等)他们。
现在我有一个实现,每块石头都在他自己的层上,我在石头层上有一个监听器,它将停用这个石头主体的物理(当用户抓住它时)并在拖动完成后重新激活。
问题是侦听器回调似乎延迟执行,这意味着在考虑重新激活物理引擎之前会显示许多帧,从而导致用户停止抓取后石头落下的延迟。
这种行为还有其他方法吗?我错过了什么吗?
谢谢 !
layer.addListener(new Pointer.Adapter() {
@Override
public void onPointerStart(Event event) {
suspendPhysik = true;
getBody().setActive(!suspendPhysik);
}
@Override
public void onPointerEnd(Event event) {
suspendPhysik = false;
getBody().setActive(!suspendPhysik);
long deltatime = System.currentTimeMillis() - prevTimestamp;
Vec2 velocity = new Vec2((event.x()
* NewGame.physUnitPerScreenUnit - prevX)
/ deltatime,
(event.y() * NewGame.physUnitPerScreenUnit - prevX)
* NewGame.physUnitPerScreenUnit / deltatime);
getBody().setLinearVelocity(velocity);
}
@Override
public void onPointerDrag(Event event) {
x = event.x() * NewGame.physUnitPerScreenUnit;
y = event.y() * NewGame.physUnitPerScreenUnit;
setPos(event.x() * NewGame.physUnitPerScreenUnit, event.y()
* NewGame.physUnitPerScreenUnit);
}
});`