如果它与鼠标处于同一位置,则停止精灵的移动

Stopping movement of sprite if it's at the same position as the mouse

我试图让精灵在 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`

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

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

我不确定 move_and_collide(...) 的作用,但您可以尝试在 else 语句中传递它 0

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

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

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

假设您想到达位置 0。您正在点击 0.00004 然后 -0.0524 然后 0.00242 这样的位置

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

我建议你试试这样的东西:

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

(这是绝对值比较)

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

move_vec = look_vec

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