我目前正在Python上制作一個簡單的輕飄飄的鳥類游戲。由于某種原因,當(dāng)管道和鳥接觸時,碰撞代碼不起作用。def collision(): global distanceDown, distanceUp distanceUp = math.sqrt(math.pow(pipeUpX - birdX, 2) + math.pow(pipeUpY - birdY, 2)) # distance formula distanceDown = math.sqrt(math.pow(pipeDownX - birdX, 2) + math.pow(pipeDownX - birdY, 2)) if distanceUp <= 20 or distanceDown <= 20: return True else: return False我已經(jīng)在主游戲循環(huán)中調(diào)用了該函數(shù),并要求python結(jié)束游戲(如果為真),但鳥只是通過管道。僅供參考,我沒有使用OOP和類。以下是值。pipeWidth = 50pipeHeight = 130pipeUpX = 800pipeUpY = 0pipeDownY = screenY - pipeHeightpipeDownX = 900pipeX_change = 1另外,我對python和編程作為一個整體非常陌生,所以請用易于理解的代碼回答。謝謝你:)
1 回答
德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個贊
該代碼不會驗(yàn)證到管道的距離。該代碼驗(yàn)證到管道起點(diǎn)和終點(diǎn)的距離。這是另一回事。
由于您的對象只是矩形,我建議使用和方法。例如,一些偽代碼:pygame.Rect objecctscolliderect
def collision(): pipeRect = pygame.Rect(pipeLeft, pipeTop, pipeWidth, pipeHeight) birdRect = pygame.Rect(birdLeft, birdTop, birdWidth, birdHeight) return pipeRect.colliderect(birdRect)
對于“圖像”的碰撞,我建議分別使用pygame.精靈.精靈/pygame.sprite.collide_mask()pygame.mask.mask.pygame.mask.mask.overlap()。
添加回答
舉報(bào)
0/150
提交
取消
