我按照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之间,当小的变化导致船舶长时间旋转时,就会出现原始问题。
我不是最擅长解释所以希望有人理解我想要实现的目标并提前感谢。
答案 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是当前的方向。如果有人有一个更简单的解决方案,我仍然会喜欢要知道,我将来可能会使用非常相似的东西。