簡體   English   中英

Pygame - 檢測碰撞方向

[英]Pygame - detect collision direction

所以我開始了一些有點大的 pygame 項目,一切都進行得或多或少。

但現在我真的被困在如何檢測碰撞的方向上。

所以我得到了我的角色(2d sidecroller)和一個用於障礙物的精靈組,現在都是矩形。 然而,現在碰撞檢測工作正常,但是,如果是,那么如何檢測字符 rect 在障礙物的哪一側與它發生碰撞?


另外,如果有人偶然發現這個問題:我最終實施的笨拙的解決方案使用了每個障礙物四條(不可見)線的“腳手架”,每邊一條。 一旦檢測到與特定障礙物的碰撞,我會在 dict 中查找碰撞矩形周圍的四行,然后檢查這些行中的哪一行當前正在與玩家精靈發生碰撞。 它有點奏效,但無論如何整個項目都是一團糟。

有許多2D物理庫包括碰撞檢測,通常像您所說的大型項目將需要其他物理,例如約束,射線投射和物體。 pyBox2D是一個很棒的python庫,在github上有不錯的文檔。 pyBox2D還將為您完全處理沖突,但您也可以設置自定義沖突處理程序。
對於您的問題,您想知道如何檢查rect碰撞到哪個位置,可以使用pygame.Rect變量來實現,如下所示

import pygame


def determineSide(rect1, rect2):
    if rect1.midtop[1] > rect2.midtop[1]:
        return "top"
    elif rect1.midleft[0] > rect2.midleft[0]:
        return "left"
    elif rect1.midright[0] < rect2.midright[0]:
        return "right"
    else:
        return "bottom"

rect1 = pygame.Rect(100, 100, 20, 20)
rect2 = pygame.Rect(100, 90, 20, 20)
print(determineSide(rect1, rect2))  

請注意,這並不檢查沖突,而只是檢查rect2相對於rect1的位置。

也許你可以檢查一個Rect四個角中的哪一個或兩個在另一個里面。 但是,有一個問題——如果Rect s接觸到角落,那么接下來要做什么取決於程序的其余部分。 我自己還沒有為此編寫代碼片段,但我也在開發一個平台游戲並計划創建一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM