2012-06-15 28 views
1

假設我的角色正在墜落,並朝着某個精靈平臺前進,並且我標記出我的角色在檢測到碰撞後已降落,那麼重置角色位置的最佳方法是什麼 - 所以他是在平臺的矩形之上還是因此他仍然在剪報?我的擔心是如果我的角色在平臺的矩形上方,比我的函數fall()將被調用,因爲他沒有觸及任何東西,並且如果我的角色正在裁剪平臺的矩形,那麼比我的jump()函數可能會受到阻礙,因爲它可能認爲他一旦起飛就會降落。很顯然,這兩種方法都有解決方法,但我只是在尋找大會,如果有的話。Pygame地面碰撞檢測和位置重置

(我可以在必要時發佈的代碼,但是代碼不是問題。我真的只是尋找合適的方法)

感謝,

邁克

回答

1

我會他觸摸平臺,以便fall()不再被調用。

如果我的角色正在剪裁平臺的矩形,那麼我的jump()函數可能會受到阻礙,因爲它可能認爲他一旦起飛就會降落。

在jump()函數中,當它移動字符時,使它不能停止,直到它移動至少x個像素爲止。

您可以通過在jump()開始處設置一個布爾值爲False並在穿過x像素後有一個計數器使其成爲True來實現。確保x足夠讓角色停止剪裁平臺,並且不要太多,以免碰到其他東西。

一旦它移動了x個像素,就允許碰撞測試開始,看看人物何時再次擊中某物。

因此,例如:

MINIMUM_DISTANCE = x 
#^how many pixels you want to move to stop clipping 

count = 0 #used for counting 

def jump(): 
    global count 
    in_air = False 
    #do your movements here, and increase count each time you move a pixel 
    if count >= MINIMUM_DISTANCE: in_air=True 
    if in_air: 
     #collision detection here 
     #once there is a collision: 
     if collision: 
      count = 0 
    return 

而只是以供將來參考,它能夠更好地發佈你的代碼,即使它不是一個代碼相關的錯誤。只是這樣我們可以看到,並得到你的方法的感覺

希望我可以幫助

+1

對我有意義。謝謝! (我意識到這是一個非常遲緩的迴應,哈哈) –

+0

@MikeRobideau哈哈不用擔心遲到。如果有幫助,記得接受答案,以免人們認爲它仍然需要回答! – hammythepig