当x
和y
与鼠标相同时,我试图使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`
答案 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
您可能会提出更好的答案。这里重要的是,您了解问题所在,并且现在可以按照自己想要的方式解决此问题。