As seen within the example, the player bounces back during the tree trunk collision. Due to permanent player input (against the trunk), the KinematicBody2D repeats its behaviour.
For the player I use a KinematicBody2D with following code:
var src = _movement * speed
var dest = acceleration
if src == Vector2.ZERO:
dest = friction
if _force != Vector2.ZERO:
_force *= (1.0 - (1.0 / friction)) * 0.9
if _force.length() <= 0.5:
_force = Vector2.ZERO
_velocity = move_and_slide(_velocity.move_toward(src, dest) + _force)
_force is Vector2.ZERO, as I only use it for external force input.
_movement indicates a normaized value on both axis.


The trunk is a part of the tilemap, whereas a collision shape (in this particular case a square) has been set up for it. I do wonder why the player bounces back, even thought the tilemap has no "surface softness" definition, nor the kinematicBody has.