我正在创建一个自上而下的2D游戏,并且使用Box2D来模拟物理,我的问题是:

如何使玩家保持与飞船相对的速度,并且在飞船也移动的情况下仍然能够在玩家周围移动?

我在下面放了一个插图。
illustration

到目前为止我尝试过的是:

将播放器主体的线速度设置为与飞船相同,这使播放器几乎固定在飞船上,而我无法移动播放器,因为我在每次更新刻度后都设置了线速度。

尝试关节似乎不是我想要的,我可能错了,当我进入飞船时,我尝试了WeldJoint和FrictionJoint来添加它们。但是,通过焊接接头,由于我被焊接到船上,所以无法移动播放器。

预先感谢您的帮助!

最佳答案

仅在不按下播放器控制器的情况下,“将播放器主体的线速度设置为与飞船相同”怎么办?

如果将scene2d用于UI,则这些Actors具有isTouched方法。或者,如果仅使用按钮,则可以创建boolean字段并进行设置,如果触摸了任何控制按钮,则为true,否则为false。

因此,您的播放器控制器方法可能如下所示。

void playerController() {
     if (!playerControllerBottonTouched) { // or actor.isTouched()
        playerBody.setLinearVelocity(shipBody.getLinearVelocity().x,
                                     shipBody.getLinearVelocity().y);
     } else {
           playerBody.applyLinearImpulse(*impulse that you want*);
       }
}

09-12 18:54