Я играю в удар. Я сделал стены и шары с классами, и у каждого класса есть прямоугольник, определяющий его положение. Все стены находятся в списке, и я проверяю список, используя 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