Графика.круг py не будет отскакивать от стен

#python #graphics

#python #графика

Вопрос:

Я пытаюсь заставить мяч отскакивать от стен моих границ. В настоящее время предполагается, что мой круг ударяется о стену, а затем меняет скорость и движется в противоположном направлении, но этого не происходит. Я был бы признателен за помощь 🙂 Спасибо

 from graphics import*
from random import*
from time import*

win = GraphWin('My Program', 600, 600)
win.setBackground('pink')
my_circle = Circle(Point(200,300),30)
my_circle.setFill('blue')
my_circle.setOutline('darkorchid1')
my_circle.draw(win)

key = win.checkKey()
while key == '':  
    
    vel_x = randint(-30,30)
    vel_y = randint(-30,30)
    my_circle.move(vel_x, vel_y)
    sleep(0.1)
    
    
    for bounce in range(600):
    
        find_center = my_circle.getCenter()
        center_x = find_center.getX()
        center_y = find_center.getY()
        
        if center_x == 600 or center_y == 600:
            vel_x = -randint(30,-30)
            vel_y = -randint(30,-30)
            my_circle.move(vel_x, vel_y)
            sleep(0.1)
    key = win.checkKey()
 

Ответ №1:

Несколько вещей, которые могут повлиять на проблему.

  1. Вы должны установить свои скорости один раз, как вы делаете в первых строках цикла while. Всякий раз, когда он отскакивает, вы должны двигаться в противоположном направлении, используя vel_x = -vel_x и vel_y = -vel_y .
  2. Прямо сейчас вы обновляете обе скорости, что может привести к некоторым странным отскокам, когда только один из центров попадает в стену.
  3. Возможно, было бы логичнее проверить, меньше ли расстояние от центра до стены, чем радиус круга. Это предотвратит проблему, когда шарик перемещается из x=599 в x=601 в течение одной итерации, пропуская оператор if . (Это также сделало бы так, чтобы круг отскакивал, когда его край ударяется о стену, а не о центр)
  1. В настоящее время вы проверяете только 2 стены, если вы не намеревались это сделать, вам следует добавить операторы if и для других стен.
  1. Небольшая другая вещь, во второй раз, когда вы рисуете случайные скорости, которые вы рисуете в диапазоне от 30 до -30, что недопустимо.