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

时间:2019-03-12 04:07:36

标签: game-physics godot gdscript

xy与鼠标相同时,我试图使Sprite停止移动。

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

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`

2 个答案:

答案 0 :(得分:1)

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

由于图像在处于鼠标位置之前一直在加速,因此将具有残留速度。将图像速度设置为0将使图像停在鼠标位置,但是请确保在应用加速度后执行此操作,以使其消除。

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

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

答案 1 :(得分:1)

嗯,这是在Unity开发游戏时发生的事情。

问题是您的超调量很小。

假设您要排名0。您遇到的位置是0.00004,然后是-0.0524,然后是0.00242

基本上,您的振荡幅度几乎为零,因为它从未完全相等。

我建议您尝试类似的操作:

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

(这是绝对值比较)

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

move_vec = look_vec

您可能会提出更好的答案。这里重要的是,您了解问题所在,并且现在可以按照自己想要的方式解决此问题。