我正在python和pygame的平臺遊戲。整個代碼可以在「https://github.com/C-Kimber/FBLA_Game」找到。我遇到的問題是玩家精靈和牆上精靈之間的碰撞,特別是角落。當玩家按下x移動鍵並跳躍時,玩家不會移動或卡住。這裏是衝突樣本:pygame sprite牆碰撞
def wallCollisions(self):
block_hit_list = pygame.sprite.spritecollide(self, self.walls, False)
for block in block_hit_list:
if self.rect.bottom >= block.rect.top and self.rect.bottom <= block.rect.top + 15: # Moving down; Hit the top side of the wall
if self.rect.right > block.rect.left:
self.rect.bottom = block.rect.top
self.yvel = 0
self.onGround = True
self.jumps = 1
elif self.rect.top <= block.rect.bottom and self.rect.top >= block.rect.bottom - 15: # Moving up; Hit the bottom side of the wall
self.rect.top = block.rect.bottom
self.yvel = 0
if self.rect.right >= block.rect.left and self.rect.right <= block.rect.left + 15: # Moving right; Hit the left side of the wall
if self.rect.bottom > block.rect.top+15:
self.rect.right = block.rect.left#+1
self.xvel = 0
elif self.rect.left <= block.rect.right and self.rect.left >= block.rect.right - 15: # Moving left; Hit the right side of the wall
self.rect.left = block.rect.right#-1
self.xvel = 0 = block.rect.right#-1
self.xvel = 0
我已經嘗試過其他方法,例如使用velocity來確定衝突的因素,但這是迄今爲止最好的工作方式。如果你能提供解決方案,將不勝感激。
你在代碼中做出的一個假設是你可以獨立地對每個塊進行碰撞。但是黑色的碰撞屬性應該依賴於它旁邊的其他塊嗎?例如,你是否應該能夠在一個塊上(onGround = true)着陸另一個塊? – samgak
看看[這個問題](https://stackoverflow.com/questions/14354171/add-scrolling-to-a-platformer-in-pygame/14357169#14357169)。雖然這個話題實際上是不同的,但它是您如何進行碰撞檢測的一個實例(查看碰撞函數)。這個想法是檢查碰撞兩次,一次是爲x,一次爲y軸。 – sloth