Я пытаюсь создать базовый симулятор эволюции, и для этого мне нужно, чтобы мои случайно созданные существа двигались к ближайшей еде. Я уверен в коде, который определяет направление для существ, поскольку я протестировал его, изменив положение на ожидаемую величину (да, я знаю, что не должен напрямую менять положение). Когда я затем использую move_and_slide
или move_and_collide
, я обнаруживаю, что вместо того, чтобы двигаться, как ожидалось, они прыгают на линию или собираются вдоль центра окна и, кажется, беспорядочно перемещаются вверх и вниз. Я не уверен, что вызывает это движение, поскольку все мои прошлые применения move_and_slide
или move_and_collide
работали отлично.
func move(food_positions, delta):
if playing:
direction = choose_direction(food_positions)
if direction != null:
move_and_slide(direction*SPEED)
Этот код вызывается извне, поскольку существа создаются внутри сцены «симуляции». food_positions
- это массив Vector2, используемый для вычисления желаемого направления. Поскольку он вызывается из другой сцены, мне нужно было передать значение дельты при использовании move_and_collide
.
Код для choose_direction
следующий:
var closest_food_pos = null
var closest_food_distance = null
# iterate through each food
for food_pos in food_positions:
# get distance betweeen the two positions
var gap = food_pos - position
var distance_food_me = sqrt(pow(gap.x,2) + pow(gap.y,2))
# insert test to within view distance here
# confiming that we are not comparing to null
if closest_food_distance != null and closest_food_pos != null:
# comparing distances
if closest_food_distance > distance_food_me:
# setting to closest food
closest_food_distance = distance_food_me
closest_food_pos = food_pos
else:
#if null need to set to first food to compare
closest_food_distance = distance_food_me
closest_food_pos = food_pos
if closest_food_distance != null and closest_food_pos != null:
var gap = closest_food_pos - position
var go_direction = gap.normalized()
return go_direction.normalized()
else:
# add ai go towards function call here
return null
Он еще не полностью закончен, и я планирую добавить кое-что в будущем.
Как примечание, это часть сцены существа, динамически инстансированная в сцене симуляции, которая является предварительно инстансированной / частью основной сцены, которая будет использоваться для управления и последующего удобства использования.
Репозиторий Git Hub: https://github.com/benpotter480/Evolution_simulation_that_doesnt_work
Извините, если части моего репозитория не отображаются как обычно, поскольку я новичок в его использовании.
Спасибо за любой совет.
choose_direction()
и для остальных ходов? - person hola   schedule 07.11.2019food_positions
? На что похоже дерево узлов? - person hola   schedule 11.11.2019