Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Box2D中更改方向时如何更新速度?_Box2d_Physics Engine - Fatal编程技术网

在Box2D中更改方向时如何更新速度?

在Box2D中更改方向时如何更新速度?,box2d,physics-engine,Box2d,Physics Engine,我正在写一个身体匀速移动的精灵。所以在时间步中是这样的: const v = body.getLinearVelocity(); v.normalize(); body.setLinearVelocity(v * speed); 然后我想听听mouseclicked事件,精灵将相应地移动到新的方向 这就是我在mouseclicked事件处理程序中所做的: const point = /* new Point on screen */ const rotation = Math.atan2(p

我正在写一个身体匀速移动的精灵。所以在时间步中是这样的:

const v = body.getLinearVelocity();
v.normalize();

body.setLinearVelocity(v * speed);
然后我想听听mouseclicked事件,精灵将相应地移动到新的方向

这就是我在mouseclicked事件处理程序中所做的:

const point = /* new Point on screen */
const rotation = Math.atan2(point.y - player.y, point.x - player.x);
body.setTransform(body.getPosition(), rotation);
但当我点击鼠标时,我的精灵不会转向新方向,而是以相同的恒定速度转向旧方向。我可以看到身体的角度在每一步都会改变。它只是不会走向新的方向

如何在Box2D中旋转精灵并将其移动到新方向?

最好使用applyForce和/或applyImpulse,因为这会使身体实际移动。setTransform会将其传送到新的变换,而不会移动

B2D将计算所有的速度,包括角速度,当你使用这些apply*方法时,真实模拟的结果是什么。如果发生不现实的情况,则应使用setTransform或setLinearVelocity等方法

如果你的身体应该像一个真实的身体一样,前后移动,你需要计算使它移动到所需的新位置所需的力,可以通过调用b2Body::SetLinearVelocity方法来定期更新速度。这可能会改变物体速度的大小和/或方向

要仅更改实体的移动方向,请执行以下操作:

获取实体调用b2Body::GetLinearVelocity的当前线性速度。 将返回的b2Vec2的本地副本旋转到新标题。 将新的线速度设置为旋转的b2Vec2调用b2Body::SetLinearVelocity。
但是请注意,在物理世界中。因此,如果你的精灵有质量,那么从物理角度来看,以这种方式改变精灵的速度就不太现实了。如果它有质量,那么正如phillip所解释的,applyForce或applyImpulse是用来提供速度变化的方法,从物理角度来看,这些变化更真实。

很抱歉,我仍然不理解你所说的将其发射到新变换的意思。我知道,当我希望它逐渐移动到某个速度时,最好使用applyForce/applyImpulse,但我只希望它以恒定的速度移动,从一开始到永远,不停止或开始。我的问题是如何在保持原有速度的情况下向一个新的方向移动。也许我们不应该说beam,而应该说teleport。setTransform就像拾取实体并将其放置在新位置一样。