使用LibGdx触摸板慢慢旋转对象

时间:2014-10-10 19:50:54

标签: android libgdx

我按照Youtube视频指南与LibGdx制作了一个小行星游戏,制作视频的人不包括触摸屏控件,因为他们只是为桌面版本做了这个。 我已经设法使用LibGdx触摸板,我已经得到它几乎工作,但在旋转船时有一些问题。

我的触控板根据角度给出-pi和+ pi之间的值(右手侧为0,底部为负值,顶部为正值)。船舶目前面临的方向也是如此。

问题在于,如果您的船在左侧并且通过触摸板从-pi变为+ pi,则船会缓慢旋转,船将在很长的路上旋转。我提出的每一个解决方案都带来了问题。我认为下面的最新解决方案有效,但在不同的领域也有同样的问题。

弧度是目前正面临的方向船。 touchPadDirection是触摸板的方向。 都是弧度。

    if (radians < touchPadDirection ){
        if( radians - touchPadDirection < MathUtils.PI && touchPadDirection >  MathUtils.PI /2 && radians <  MathUtils.PI /2 ) {
            System.out.println("1st choice");
            setRight(true);
            setLeft(false);
        }else{
            System.out.println("3rd choice");
            setLeft(true);
            setRight(false);
        }
    }
    if (radians > touchPadDirection) {
        if( radians - touchPadDirection > MathUtils.PI && touchPadDirection <  MathUtils.PI /2 && radians >  MathUtils.PI /2) {
            System.out.println("2nd choice");
            setRight(false);
            setLeft(true);
        }else{
            System.out.println("4th choice");
            setRight(true);
            setLeft(false);                 
        }
    }
}

我发现谷歌的唯一旋转问题似乎有助于物品立即旋转,因为它只会面向船的方向。所以我需要以某种方式让它始终保持正确的旋转方式(始终以最快的方向旋转)。请记住,这些值介于-3.14和3.14之间,当小的变化导致船舶长时间旋转时,就会出现原始问题。

我不是最擅长解释所以希望有人理解我想要实现的目标并提前感谢。

1 个答案:

答案 0 :(得分:0)

我认为我已经解决了这个问题,对此进行了大量测试,一切似乎都正常。

public void rotate(float touchPadDirection) {
    if (radians > 0 && touchPadDirection < radians - MathUtils.PI){
        setLeft(true);
        setRight(false);
    }else if (radians < 0 && touchPadDirection > radians + MathUtils.PI){
        setLeft(false);
        setRight(true);
    }else if (touchPadDirection > radians){
        setLeft(true);
        setRight(false);
    }else if (touchPadDirection < radians){
        setLeft(false);
        setRight(true);
    }
}

就像所有事情一样,解决方案总是比我尝试的大多数事情都简单,因为之前radians是玩家船舶的当前面向,而touchPadDirection是当前的方向。如果有人有一个更简单的解决方案,我仍然会喜欢要知道,我将来可能会使用非常相似的东西。