2017-05-08 58 views
0

在我的iPhone上使用Pythonista 2,我試圖創建一個觸摸操縱桿。它是一個簡單的概念,我觸摸屏幕上的某個地方,操縱桿和邊界捕捉到該位置。然後,當我移動手指時,邊界保持不動,但內部的操縱桿移動,直到我到達邊界的邊緣,然後它沿着邊界中心和我的手指之間的圓的圓周。這裏是代碼:Python觸發問題

def touch_moved(self, touch): 
    global r 
    r = 90 
    l = (touch.location-c[0],touch.location-c[1]) 
    a = math.degrees(math.tan(l[1]/l[0])) 
    if (touch.location[0] - c[0])**2 + (touch.location[1] - c[1])**2 < r**2: 
     self.joystick.position = touch.location 
    else: 
     self.joystick.position = ((math.cos(a)*r)+c[0],(math.sin(a)*r)+c[1])` 

但是,遊戲杆外圍的溫暖,所以任何幫助表示讚賞。

回答

1
  1. 您使用a作爲參數來sincos,但它給math.degrees()有電話進來; trig函數總是以弧度運算,而不是度數。

  2. a來自tan的呼叫結果,該呼叫應該是警告標誌:tan使用角度作爲輸入,通常不用作輸出。您可能需要這裏的反函數,atan。實際上,你真正想要的是math.atan2(),它將水平和垂直值作爲單獨的參數。當您的代碼被寫入時,如果觸摸位置直接位於中心點的上方或下方,則會出現零除錯誤。

  3. 你的l計算似乎是錯誤的 - 你不應該使用索引[0][1]touch.location,就像你以後做兩行呢?

+0

非常感謝!它完美的工作! – BrrrIce