1

我有一门可以发射炮弹和烟雾粒子效果的大炮,我希望炮弹从大炮的末端开始,我可以通过将大炮的宽度添加到它的 x 位置并将一半的高度添加到大炮。当大炮未旋转时,这可以正常工作,但是当我旋转大炮时,它不在正确的位置。这就是我用来尝试旋转矢量的方法。

Vector2 rotPos = cannon.position.tmp().add(cannon.bounds.width, cannon.bounds.height/2).rotate(cannon.angle);

我怎样才能得到一个旋转的矢量,在正确的位置发射炮弹。见下图。 在此处输入图像描述

更新我也尝试了下面的,同样的结果,球在左边

Vector2 rotPos = world.CannonBody.getWorldVector( world.CannonBody.getPosition() );
4

2 回答 2

0

我遇到了一个和你类似的问题。这是一个有答案的问题:

安卓。如何沿它所面对的方向移动对象(使用 Vector3 和四元数)

你需要类似的东西

translation.set(baseDirection).rot(modelInstance.transform).nor()
于 2013-09-03T17:39:20.307 回答
0

你描述问题的方式,你只解决了一个案例。这真的只是一个数学问题。想想你要射击的方向,大炮的枪管,作为一个圆上的坐标。

既然你知道角度,这很容易。在中心画一个圆点。然后从中心到右边缘画一条线。然后从第一条线向上以 45 度角画另一条线。用直线连接边缘上的两个点。你现在有一个三角形。

让我们将 45 度角线称为“r”。我们称第一行为 x,最后一行为 y。

你应该有这样的东西:http: //i.stack.imgur.com/MJNWZ.jpg

我们知道 sin(angleInRadians) = y/r。做一点代数,我们可以把它变成 r*sin(angleInRadians) = y

繁荣,你有你的y坐标。

几乎相同的东西: cos(angleInRadians) = x/r

所以 r*cos(angleInRadians) = x

这是你的 x 坐标。

您可以直接从 box2d 获得身体的角度,这很容易。您只需要为“r”选择一个值,该值代表您用来以给定角度概念化大炮枪管的圆的正确半径。如果大炮围绕圆心旋转,则 r 是大炮的长度。

于 2013-07-16T00:30:15.660 回答