我正在使用 pygame 創(chuàng)建俄羅斯方塊。我想使用碰撞檢測,以便當游戲中的形狀與之前播放的任何其他形狀接觸時,我可以按照俄羅斯方塊的邏輯停止該形狀。我遇到了使用蒙版的像素完美碰撞。我已經(jīng)在線學習了一些教程,但是每次出現(xiàn)新形狀時像素檢測都會返回 true,而不是任何形狀發(fā)生碰撞時。對于長代碼提前抱歉,它是代碼實際并且仍然包含它的游戲元素的最低限度。我認為我的方法有問題導致了這個錯誤。我基本上有一個功能,每當游戲中的形狀與“地板”接觸時,該形狀就會保持在該位置并創(chuàng)建一個新形狀。我認為我把它復雜化了,反過來又造成了這個錯誤。
1 回答

慕妹3146593
TA貢獻1820條經(jīng)驗 獲得超9個贊
問題是您沒有更新精靈rect
屬性。精靈rect
都具有位置 (0, 0)(因為您沒有在對 的調用中設置它self.image.get_rect()
),因此蒙版將全部重疊和碰撞。
如果您閱讀pygame.sprite.collide_mask的文檔,您會注意到它說您的精靈需要具有mask
和rect
屬性。您的 sprite 中有一個rect
,并將其設置在 中__init__()
,但是當您移動 sprite 時,它不會保持更新。您只需更改x
和y
屬性而無需調整rect
位置。collide_mask
想要 a的原因rect
是它使用它來確定它使用的pygame.mask.Mask.overlap()offset
調用的參數(shù)。重要的是要意識到面具本身沒有位置,他們需要 s來確定面具的相對位置。rect
這類似于沒有位置并且需要rect
為它們跟蹤的圖像/表面。
在一個單獨的問題上,您將精靈發(fā)送到屏幕的方式毫無意義。您沒有使用 sprite 組的能力進行繪制,更糟糕的是,您將 sprite 的圖像、x 和 y 保存在單獨的列表中,而不將其包含在 sprite 本身中。
添加回答
舉報
0/150
提交
取消