我正在制作一个迷你游戏,玩家可以跳到旋转螺旋桨上。我有两个可能的相关错误,我无法追查。 当不在螺旋桨上时,通过调整球员速度矢量并将其添加到位置矢量的变化来简单地完成移动
velocityVector.x += moveSpeed;
x += velocityVector.x;
当在螺旋桨上时,玩家必须以圆周运动方式移动。
我是这样做的 float radius = vectorBetweenPlayerandPropeller.len();
if (propeller.getRotation() != 0)
{
velocityVector.x = (float) (propeller.anchorPoint.x + radius * Math.cos(Math.toRadians(propeller.getTotalRotation() ))) - positionVector.x;
velocityVector.y = (float) (propeller.anchorPoint.y + radius * Math.sin(Math.toRadians(propeller.getTotalRotation() ))) - positionVector.y;
}
else
{
velocityVector.x = 0;
velocityVector.y = 0;
}
问题1: 当我降落在旋转螺旋桨上时(非旋转工作正常)我立即重新定位到螺旋桨的远端。我如何计算速度肯定有问题。可能,我无法通过根据圆周运动计算新的x值来找到速度,然后撤回当前位置(positionVector.x)。 也许,也许,
Math.toRadians(propeller.getTotalRotation() )
是错误的。旋转当前是顺时针方向,因为这在绘制旋转螺旋桨时效果很好。然而,弧度的世界是逆时针的,所以这条线可能就像
Math.toRadians(360 - propeller.getTotalRotation() )
然而,当我这样做时,玩家不再跟随旋转螺旋桨了。
问题2: 玩家还必须能够在旋转的螺旋桨上下移动。我通过一些有点凌乱的代码来做到这一点:
//360-rotation due to clockwise/counter-clockwise difference between radians and degrees.
double adjustedRotationRad = Math.toRadians(360-propeller.getTotalRotation());
if(left) {
//How is the propeller incline? Should the velocityVector.y be positive? (first case, hence we move downwards since position 0,0 is top left)
// or should we move upwards? (negative velocityVector.y)
velocityVector.x -= moveSpeed*Math.abs(Math.cos(adjustedRotationRad));
if (((90 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 0)) ||
((360 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 270)))
velocityVector.y += moveSpeed*Math.sin(adjustedRotationRad);
else if ((270 > (propeller.getTotalRotation()) && (propeller.getTotalRotation()) > 90))
velocityVector.y -= moveSpeed*Math.sin(adjustedRotationRad);
}
这个错误有点奇怪:当我在螺旋桨上移动时,我无法通过螺旋桨的中间位置,玩家就会卡住。