I looked at KinematicBody.move_to
... and it's not explained very well IMO.
It doesn't do what you think it does, in fact, it calls move()
with a motion equal to the distance to the position you give it:
// Engine code
Vector2 KinematicBody2D::move_to(const Vector2& p_position) {
return move(p_position-get_global_position());
}
So it actually is a teleport, unlike the doc says. It's just that it will stop if it encounters a collision on its way. Speed makes no sense here.
On the other hand, using move
you can specifiy a direction, as explained in my answer https://godotengine.org/qa/12544/move-an-object-sprite-forever-at-its-current-angle-rotation
By doing this:
move(direction_vector * (speed * delta))