首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我对戈多的move_and_slide和move_and_colide函数有问题

我对戈多的move_and_slide和move_and_colide函数有问题
EN

Stack Overflow用户
提问于 2019-11-04 18:47:21
回答 1查看 1.3K关注 0票数 0

我试图创建一个基本的进化模拟器,为了做到这一点,我要求我随机创建的生物向最近的食物移动。我对获得生物方向的代码很有信心,因为我已经用预期的数量修改了位置(是的,我知道我不应该直接改变位置)。当我使用move_and_slidemove_and_collide时,我发现它们不是像预期的那样移动,而是跳到一条线上,或者沿着窗口的中心聚集起来,似乎随机地上下移动。我不知道是什么导致了这一运动,因为我过去对move_and_slidemove_and_collide的所有使用都非常好。

代码语言:javascript
运行
复制
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的代码如下:

代码语言:javascript
运行
复制
    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存储库是:https://github.com/benpotter480/Evolution_simulation_that_doesnt_work

对不起,如果我的存储库的部分没有显示为正常,因为我是新手使用它。

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 20:47:07

好吧,我有个解决办法。

前言

我首先在move_and_slide()上添加了一个断点,然后从主场景运行该项目,然后逐步遍历代码。什么都看不见。正在设置和初始化这些值。我添加了print语句,以了解food_positionscreature_positionsdirection随着时间的推移显示了什么,并认为第一帧不应受到指责。但是,什么都没有被忽视。

我检查了生物现场。一定有什么东西在那里。代码看起来很好,没有什么应该导致move_and_slide()做它正在做的事情。我孤立地运行着这个生物场景。你猜怎么着,成功了。所以,至少我知道这不是在生物的场景里。

这太麻烦了。据我所知,它在模拟中失败了,没有任何理由。我试着生产100种食物,100种生物。

然后是一个生物。

那家伙没动。那是有意义的。当有更多的生物时,它们就像是被强迫进入彼此。在做了更多的摆弄之后,我不知不觉地旋转着wall_left的静态身体,注意到了那个小小的凸起,然后,等等,那不是RectangleShape2D

我删除了所有的墙然后..。

啊,真灵!模拟成功了!

TL;DR /溶液

LineShape2D碰撞形状的墙壁有它的法线面对错误的方向。将LineShape2DNormal(0, -1)更改为(0, 1)

结论

那是个抓头的地方。希望这有助于和快乐的编码!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58699375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档