我试图创建一个基本的进化模拟器,为此我需要我随机创建的生物向最近的食物移动。我对获取生物方向的代码很有信心,因为我已经通过按预期数量修改位置来测试它(是的,我知道我不应该直接改变位置)。然后当我使用其中一个时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
抱歉,如果我的存储库的某些部分没有正常显示,因为我是新手。
感谢您的任何建议。