2014-10-10 35 views
0

我跟着Youtube視頻指南製作了一個使用LibGdx的小行星遊戲,製作視頻的人沒有包含觸摸屏控制,因爲他們只是在桌面版本中進行操作。 我已經設法使用LibGdx觸摸板,我已經掌握了它幾乎工作,但旋轉船舶時有一些問題。使用LibGdx觸控板緩慢旋轉物體

我的觸摸板根據角度給出-pi和+ pi之間的值(右側爲0,bottom爲負值,top爲正值)。這同樣適用於船目前的方向。

問題是,隨着船隻緩慢旋轉,如果你在左側,並用觸摸板從-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

我認爲我解決了這個問題,測試了很多東西,一切似乎都正常。

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); 
    } 
} 

像其他事物的解決方案總是比大多數的事情,我嘗試,由於弧度之前是球員的船目前面對和touchPadDirection是它是在舉行的電流方向簡單。如果任何人有一個更簡單的解決方案我仍然想知道,因爲我將來可能會使用非常相似的東西。