LibGDX在不失去轮换的情况下翻译对象

时间:2016-09-09 21:24:49

标签: java libgdx

我正在开发游戏并使用libGDX。我有一个球站在地板上,如果球员按下键,可以画一个围绕它旋转的箭头。一切都好,直到这里。但是如果我的球在移动(在地板上滚动),我就无法通过旋转来更新箭头的位置。请看看: my super drawing skills

让我们说球处于1.状态并且滚动并且球员在此期间按下右键,几秒钟之后球到达2.状态并且如图所示,箭头已旋转一些并在球旁边翻译。如果球没有移动我可以提供这个但是如果球在移动我无法以某种方式制造它。

以下是我在渲染方法中的代码:

// ARROW MOVEMENTS
if(arrLeft)
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Y, 1);
if(arrRight)
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Y, -1);
if(arrUp)
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Z, 1);
if(arrDown)
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Z, -1);

我的rotateAround方法:

public static void rotateAround(ModelInstance instance, Vector3 radius, Vector3 axis, float angle){
    instance.transform.translate(-radius.x, -radius.y, -radius.z).rotate(axis, angle).translate(radius);
}

顺便说一句,这是我的几十个尝试代码中的一个,我希望这会有效,但它只是使箭头绕着自己的轴转动:

arrowInstance.transform.getRotation(quat, true);
arrowInstance.transform.set(MyGdxGame.tmpVec.set(getBallPos()).add(0.8f,0,0), quat);

1 个答案:

答案 0 :(得分:0)

我认为这再次尝试变得更聪明并找到了解决方案。我应该首先将箭头定位在球的位置,然后从那里将其转换为我已经用于rotateAround方法的半径。旋转自动存储在变换矩阵中,无需弄乱它。

arrowInstance.transform.setTranslation(getBallPos());
arrowInstance.transform.translate(0.8f,0,0);

(" 0.8,0,0"是我用于rotateAround方法的半径)