Question
So i have this key that follows the player. the player is clean but if the velocity is to high the key starts jittering on my PC. Any idea how to fix this ?
Camera is attached to the Player Node and Smoothing is off.
This Rubberband effect is done if one line of code
func _process(delta):
if Gobal.player_has_key == false:
waiting_animation()
elif Gobal.player_has_key == true:
if Gobal.player_facing_right == true:
follow_position = Gobal.player_position_vector + Vector2(-14,0)
else:
follow_position = Gobal.player_position_vector + Vector2(14,0)
#animation_player.play("following_animation")
area_2d.monitoring = false
following_animation(delta)
func following_animation(delta):
get_tree().create_tween().tween_property(self, "position", follow_position, follow_time)
Probably best to not use a tween for animations that happen every frame.
you could use lerp
if you do not care about frame dependency, or this function if you do
func exp_decay(a, b, decay, delta):
return b + (a - b) * exp(-decay * delta)
func following_animation(delta) -> void:
# play around with the number 16; a good range is 1 to 25
position = exp_decay(position, follow_position, 16, delta)
— Lerp smoothing is broken by Freya Holmer
thank you! i never hear of leaps before, looks complicated for a beginner like me. But i watch this video later and give it a try
The lerp variation is pretty simple, usually gets mistakenly recommended over better animation tools. But in your case it might be what you’re looking for.
position = position.lerp(follow_position, 0.1)
This example takes position
and makes it 0.1
aka 10% closer to follow_position
. Done every frame it looks rather smooth, but it is frame dependant, meaning low-framerate computers would see a very different path from high-framerate players.
And you can see part of the lerp inside the exp_decay
function, and the difference when they are side-by-side
func lerp(a, b, weight):
return b + (a - b) * weight
func exp_decay(a, b, decay, delta):
return b + (a - b) * exp(-decay * delta)
1 Like