我有一个发射炮弹和烟雾粒子效果的大炮,我希望炮弹从大炮的末端开始,我可以通过将大炮的宽度加到其x位置并添加一半加农炮的高度。当大炮未旋转但是当我旋转大炮时它不在正确位置时工作正常。这就是我用来尝试旋转矢量的方法。
Vector2 rotPos = cannon.position.tmp().add(cannon.bounds.width, cannon.bounds.height/2).rotate(cannon.angle);
如何获得旋转的矢量,在正确的位置发射炮弹。见下图。
UPDATE 我也尝试了以下,同样的结果球向左移动
Vector2 rotPos = world.CannonBody.getWorldVector( world.CannonBody.getPosition() );
答案 0 :(得分: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就是你的大炮的长度。
答案 1 :(得分:0)
我有一个类似于你的问题。这是一个答案的问题:
Android. How to move object in the direction it is facing (using Vector3 and Quaternion)
你需要像
这样的东西translation.set(baseDirection).rot(modelInstance.transform).nor()