Вы должны рассчитать Единичный вектор из кружка в направлении пищи (длина единичного вектора равна 1).Масштабируйте единичный вектор на speed
и добавьте результат к координате круга.
В пигме вы можете использовать pygame.math.Vector2
для векторных вычислений, .normalize()
вычисляет вектор единиц:
p_food = pygame.math.Vector2(index[0], index[1])
p_circle = pygame.math.Vector2(x, y)
unit_dir = (p_food - p_circle).normalize()
x += unit_dir.x * speed
y += unit_dir.y * speed
Конечно, это можно упростить:
x, y = (pygame.math.Vector2(index) - (x, y)).normalize() * speed + (x, y)
Если вы хотите перейти от еды к следующей, то вы можете 'Делайте это в таком цикле, как это, но вы можете переходить от продуктов к списку один за другим.Используйте индекс (food_i
), чтобы определить следующий объект food_list
для перехода.Увеличивайте индекс, когда еда достигнута:
Инициализируйте индекс следующей еды перед основным циклом программы:
food_i = 0
Вычислите расстояние от центра круга доеда по .distance_to () в цикле применения:
p_food = pygame.math.Vector2(food_list[food_i])
dist = p_food.distance_to((x, y))
Переместите круг на один шаг к еде.Убедитесь, что круг не перешагивает через еду, вычислив минимальное оставшееся расстояние и расстояние в один шаг (min(dist, speed)
):
if dist > 0:
x, y = (p_food - (x, y)).normalize() * min(dist, speed) + (x, y)
Переключитесь на следующую еду, если еда достигнута:
if dist < speed and food_i < len(food_list)-1:
food_i += 1