3

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

2 回答 2

1

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

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

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

基本上,你在零附近振荡,因为它从来都不是完全相等的。

我建议您尝试以下方法:

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

(这是绝对值比较)

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

move_vec = look_vec

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

于 2019-03-18T13:08:43.363 回答
1

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

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

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

if move_vec != look_vec:
    ...
else:
    move_and_collide(0)
于 2019-03-12T20:36:35.220 回答