Я вижу две (похожие) проблемы с вашим кодом.Во-первых, вы можете бросить необычную математику, изобретая метод черепахи .towards()
, который дает вам угол, который вы ищете.Во-вторых, вы изобретаете штампы , которые, в отличие от большинства элементов черепахи, могут быть чисто удалены с экрана с помощью clearstamp()
.Кроме того, вы используете параллельные массивы координат, что указывает на отсутствие правильной структуры данных.Я заменил это одним массивом, содержащим кортежи позиций и штампов.
Я настроил динамику вашей программы, заставляя точки действовать независимо (по таймеру) и не полагаться на движениекурсор.Т.е. они движутся в направлении курсора, движется он или нет.Кроме того, я заставил курсор расти только тогда, когда точка достигает и исчезает:
from turtle import Turtle, Screen
CURSOR_SIZE = 20
def move(x, y):
""" has it follow cursor """
t1.ondrag(None)
t1.goto(x, y)
screen.update()
t1.ondrag(move)
def grow():
""" grows t1 shape """
global t1_size
t1_size += 0.4
t1.shapesize(t1_size / CURSOR_SIZE)
screen.update()
def follow():
""" has create()'d dots follow t1 """
global circles
new_circles = []
for (x, y), stamp in circles:
t2.clearstamp(stamp)
t2.goto(x, y)
t2.setheading(t2.towards(t1))
t2.forward(2)
if t2.distance(t1) > t1_size // 2:
new_circles.append((t2.position(), t2.stamp()))
else:
grow() # we ate one, make t1 fatter
screen.update()
circles = new_circles
if circles:
screen.ontimer(follow, 50)
def create():
""" create()'s dots with t2 """
count = 0
nux, nuy = -400, 300
while nuy > -400:
t2.goto(nux, nuy)
if t2.distance(t1) > t1_size // 2:
circles.append((t2.position(), t2.stamp()))
nux += 50
count += 1
if count == 17:
nuy -= 50
nux = -400
count = 0
screen.update()
# variables
t1_size = 4
circles = []
screen = Screen()
screen.screensize(900, 900)
t2 = Turtle('circle', visible=False)
t2.shapesize(4 / CURSOR_SIZE)
t2.speed('fastest')
t2.color('purple')
t2.penup()
t1 = Turtle('circle')
t1.shapesize(t1_size / CURSOR_SIZE)
t1.speed('fastest')
t1.color('orange')
t1.penup()
t1.ondrag(move)
screen.tracer(False)
create()
follow()
screen.mainloop()
![enter image description here](https://i.stack.imgur.com/fjOkp.png)
Вы должны быть в состоянии переделать этот кодделать все, что вы хотите.Я настоятельно рекомендую вам потратить некоторое время на чтение документации Turtle, чтобы вам не пришлось заново изобретать ее многочисленные функции.