簡體   English   中英

如何防止我的精靈通過pygame中的對象?

[英]How do I prevent my a sprite from going through an object in pygame?

所以我一直在研究游戲,到目前為止最大的問題是我們無法讓玩家與場地上的任何物體發生碰撞。 相反,它們直接穿過樹。 誰能告訴我為什么? 這是我嘗試用於沖突檢測的代碼:

for tree in treelist:


    if self.player.rect.x == tree.rect.x:
        self.player.rect.x == self.player.rect.x - 2
    if self.player.rect.x == tree.rect.x + tree.rect.width:
        self.player.rect.x == self.player.rect.x + 2

    if self.player.rect.y == tree.rect.y:
        self.player.rect.y == self.player.rect.y - 2
    if self.player.rect.y == tree.rect.y + tree.rect.height:
        self.player.rect.y == self.player.rect.y + 2

從理論上講這是合理的還是我做錯了?

您在使用pygame嗎? 如果是這樣,則有內置的colliderect函數( 此處的文檔)。

如果不:

  • 這是一個相對較深入的討論,在設計時會考慮平台游戲。
  • 只是針對軸對齊(即未旋轉)的矩形的准系統二維碰撞檢測

請記住,快速移動的物體會使碰撞檢測變得非常困難,因為它們會在一幀范圍內移動“過去”物體! 有更先進的技術可以解決此問題,但是現在,請嘗試使碰撞盒相對較大,並且動作相對較慢。

編輯:糟糕,我的第一句話聽起來很粗魯。 我只是以某種方式忘記了這篇文章的標題是...

幾乎合理的理論。 您僅在檢查player矩形位置是否與tree矩形位置的邊界完全相同。 這種情況很少發生。 您還需要檢查玩家是否在樹的邊界之間,如下所示:

# check if player is overlapping the tree
if tree.rect.x <= self.player.rect.x <= tree.rect.x + tree.rect.width:
    # decide on how to move player away from the tree depending on previous frame
    # if player is moving forward, send them backwards from tree
    if self.player.rect.prev_x < self.player.rect.x:
        self.player.rect.x -= 2
    # otherwise send them forwards from tree
    else:
        self.player.rect.x += 2

重疊檢查和重疊反應的確切邏輯完全取決於您,但是這種事情應該可以解決。 請注意,您將需要跟蹤玩家在前一幀中的位置,否則您將不知道他們從哪個方向擊中樹。 您可以這樣做:

self.player.rect.prev_x = self.player.rect.x
self.player.rect.x += player_velocity

暫無
暫無

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

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