Реализуйте логику, чтобы кружок следовал не за мышью, а до точки в которую кликнули мышью (используйте событие <Button-1>
). По достижении точки кружок должен прикратить свое движение.
Если получится то нарисовать вектор направления кружка
Сейчас у нас кружок строко привязан к мышке. Но мы можем сделать интереснее если просто заставим кружок следовать за мышью:
data = {
"counter": 0,
"mouse": (0, 0),
"circle_location": (250, 100), # добавили реально пололжение кружка
"speed": 6, # добавили скорость
}
def update():
# теперь пишем тут, двигаем кружок в сторону мыши
cx, cy = data['circle_location']
mx, my = data['mouse']
# это так называемый вектор скорости
vx = mx - cx
vy = my - cy
# считаем его длину
length = math.sqrt(vx ** 2 + vy ** 2)
# нормализуем координаты вектора, чтобы они были в пределах от 0 до 1
vx /= length
vy /= length
# сдвигаем кружок в сторону мыши с указаной скоростью
cx += vx * data['speed']
cy += vy * data['speed']
# фиксируем координаты кружка в data
data['circle_location'] = (cx, cy)
пробуем запустить:
ну вроде ничего так, правда движение очень какое-то неесетственное получается. Можно сделать его более плавными если двигать объект не вектором скорости а вектором ускорения, тогда он уже не сможет мнгновенно менять своем ускорение и будет некоторое время двигаться по инерции.
Правим код
data = {
"counter": 0,
"mouse": (0, 0),
"circle_location": (250, 100),
"circle_velocity": (0, 0), # добавили вектор скорости кружочка
"speed": 3, # снизим скорость чуток
}
def update():
cx, cy = data['circle_location']
c_vx, c_vy = data['circle_velocity'] # вытаскиваем теперь еще и скорость
mx, my = data['mouse']
# тут ничего не меняем
vx = mx - cx
vy = my - cy
length = math.sqrt(vx ** 2 + vy ** 2)
vx /= length
vy /= length
# тут теперь пересчитываем c_vx и c_vy
c_vx += vx * data['speed']
c_vy += vy * data['speed']
# тормозящий момент
c_vx -= c_vx * 0.2
c_vy -= c_vy * 0.2
# сдвигаем cx и cy на c_vx и c_vy
cx += c_vx
cy += c_vy
# фиксируем координаты и скорость кружка в data
data['circle_velocity'] = (c_vx, c_vy)
data['circle_location'] = (cx, cy)
тестим:
Реализуйте логику, чтобы кружок следовал не за мышью, а до точки в которую кликнули мышью (используйте событие <Button-1>
). По достижении точки кружок должен прикратить свое движение.
Если получится то нарисовать вектор направления кружка