好吧,所以我有两个角度。一个是操纵杆的角度,另一个是相机与玩家的角度。相机的角度。现在我想要它,所以当我按下操纵杆时,它会让玩家远离相机。我该怎么做?在Java或Ardor3d中有一种简单的方法吗?
编辑:以下是我如何获得角度的代码。
float camDegree = (float) Math.toDegrees(Math.atan2(
_canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(),
_canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf());
player.angle = (float) Math.toDegrees(Math.atan2(padX, padY));
Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y);
答案 0 :(得分:8)
我不得不说我真的不明白你的问题,但它似乎是关于如何使用操纵杆实现相机相对控制。
我能给你的最重要的建议是,最好不要计算角度,而是直接使用矢量。
假设相机正朝 v 方向看(在某些类型的游戏中,此向量将直接指向玩家,但不是所有类型的游戏,并非总是如此):
通常你不关心这个向量的垂直分量,所以删除它以得到水平分量,我将其称为 y ,其原因将在以后变得明显:
y = v - ( v ·向上)向上
其中向上是垂直向上指向的单位向量。
我们可以使用十字产品找到与 y 垂直的水平向量(并记住右手规则):
x = v ×向上
现在你可以看到 y 是指向前方(远离相机)的平面中的向量, x 指向右侧的平面中的向量(侧面带有尊重相机)。如果你将这些向量标准化:
x = x / | x |
ŷ = y / | y |
然后您可以使用 x 和ŷ作为播放器相机相对运动的坐标基础。如果你的操纵杆读数是 Jx 和 Jy ,那么移动玩家
s ( Jx x + Jy ŷ)
其中 s 是与玩家速度成比例的合适标量值。
(注意,在这个答案中的任何一点都没有计算角度!)