我在做一个推杆游戏。我用类制作了墙和球,每个类都有一个矩形来定义它的位置。所有的墙都在一个列表中,我使用colliderect检查列表,看球是否碰到了任何墙。如果是这样,根据墙(垂直或水平),我改变球的方向。问题是,偶尔,球会撞到墙上,卡在里面。我想象它只是不断地与墙壁相撞,不断地改变方向,使它保持静止。你知道吗
我试着增加一个冷却时间,但即使这样也不总是奏效。球的速度不应该是一个问题,如果它每帧移动3倍,如果它的方向改变后在下一帧移动相同的速度。然而,较慢的速度有帮助,但仍然不能完全解决这个问题。另外,我在每一帧上移动球之前检测碰撞。你知道吗
for wall in walls:
if wall.type == "hwall":
if wall.rect.colliderect(ball.rect):
ball.y_change = -(ball.y_change)
elif wall.type == "vwall":
if wall.rect.colliderect(ball.rect):
ball.x_change = -(ball.x_change)
以下是完整代码: https://pastebin.com/85Ge175i
尝试了所有建议的方法,但没有一种对我有效。放弃使用pygame colliderect功能,因为它似乎不适合我的特定需求。相反,我检查了所有墙壁上的球的位置,然后手动碰撞。另外,在碰撞时,我会将球向后移动一点,以防止它卡在墙上。你知道吗
一个快速的解决方案是不仅要检查碰撞,还要检查墙和球的矩形边缘的位置。
代码应该是不言自明的:
这样你就可以确定一旦速度分量被翻转,它就不会立即被翻转回来。你知道吗
相关问题 更多 >
编程相关推荐