【问题标题】:Stopping movement of sprite if it's at the same position as the mouse如果精灵与鼠标位于同一位置,则停止精灵的移动
【发布时间】:2019-08-02 11:36:27
【问题描述】:

我正在尝试让精灵在 xy 与鼠标相同时停止移动。

由于某种原因,一旦图像与鼠标处于同一位置,图像就会开始在同一轴上来回快速移动。我需要让它停止移动。

func _physics_process(delta):
    var move_vec = Vector2()
    var look_vec = get_global_mouse_position() - global_position
    //this gets the mouse and sprite position

    if move_vec != look_vec: // if mouse and sprite are not the same then move.
        move_vec = look_vec
        move_vec = move_vec.normalized()
        move_and_collide(move_vec * speed * delta)
        global_rotation = atan2(look_vec.y, look_vec.x)
    else:
        pass`enter code here`

【问题讨论】:

    标签: game-physics godot gdscript


    【解决方案1】:

    啊,这发生在我使用 Unity 进行游戏开发时。

    问题是您的超调量非常小。

    假设您想到达位置 0。您要到达的位置是 0.00004,然后是 -0.0524,然后是 0.00242

    基本上,你在零附近振荡,因为它永远不会完全相等。

    我建议您尝试以下方法:

    if move_vec - look_vec > someMinValue || move_vec - look_vec < -someMinValue 
    

    (这是绝对值比较)

    基本上,如果它在一些小的价值内,你可以告诉游戏放松并接受它。然后,您可以选择调整该值以使其完全等于所需值:

    move_vec = look_vec
    

    您可能会想出更好的答案。重要的是,您了解问题所在,现在可以按照您想要的方式进行纠正。

    【讨论】:

      【解决方案2】:

      您需要在 else 语句中将图像的速度设置为 0。

      图像将具有剩余速度,因为它在鼠标位置之前正在加速。将图像速度设置为 0 会将图像停止在鼠标位置,但请确保在应用加速度后执行此操作,以便将其取消。

      我不确定 move_and_collide(...) 是做什么的,但您可以尝试在 else 语句中传递 0 吗?

      if move_vec != look_vec:
          ...
      else:
          move_and_collide(0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-13
        相关资源
        最近更新 更多