<p>尝试了所有建议的方法,但没有一种对我有效。放弃使用pygame colliderect功能,因为它似乎不适合我的特定需求。相反,我检查了所有墙壁上的球的位置,然后手动碰撞。另外,在碰撞时,我会将球向后移动一点,以防止它卡在墙上。你知道吗</p>
<pre><code># Check for collision
for wall in walls:
if wall.type == "hwall":
if ball.y_change < 0:
if wall.rect.top <= ball.rect.top <= wall.rect.bottom and wall.rect.left <= ball.rect.center[0] <= wall.rect.right:
ball.y_change = -(ball.y_change)
ball.y += speed_y * 2
else:
if wall.rect.top <= ball.rect.bottom <= wall.rect.bottom and wall.rect.left <= ball.rect.center[0] <= wall.rect.right:
ball.y_change = -(ball.y_change)
ball.y -= speed_y * 2
elif wall.type == "vwall":
if ball.x_change < 0:
if wall.rect.left <= ball.rect.left <= wall.rect.right and wall.rect.top <= ball.rect.center[1] <= wall.rect.bottom:
ball.x_change = -(ball.x_change)
ball.x += speed_x * 2
else:
if wall.rect.left <= ball.rect.right <= wall.rect.right and wall.rect.top <= ball.rect.center[1] <= wall.rect.bottom:
ball.x_change = -(ball.x_change)
ball.x -= speed_x * 2
</code></pre>