|
|
|
 |
Attention |
Topic was automatically imported from the old Question2Answer platform. |
 |
Asked By |
Xylo4nic |
So I was following a GD quest tutorial on 2d platformer and noticed that although everything works well when I tried to add a slope in game the box just climb it without rotating along side the degree of the slope. The box is a kinematic body 2d and i am using move and slide(linear_velocity, up direction(0,-1)) to control it. I look up the documents and figure that move and slide could be used to handle slopes but I just couldn’t find a way to do that.
1 Like
|
|
|
 |
Reply From: |
PunchablePlushie |
You can get the floor normal using get_floor_normal
, then set the rotation of your sprite to be equal to the angle of the floor normal.
Note that you should call get_floor_normal
after calling move_and_slide()
. You can also use the is_on_floor()
method to check if the player is on floor and only get the normal then.
So, the code could look something like this:
func _process(delta: float) -> void:
# Some code for getting the velocity, applying gravity, etc
move_and_slide(velocity, Vector2.UP)
if is_on_floor():
var normal: Vector2 = get_floor_normal()
$Sprite.rotation = normal.angle()
Depending on your sprite, you might need to apply an offset to the rotation in order to align your it properly with the floor tho.
var offset: float = deg2rad(90)
$Sprite.rotation = normal.angle() + offset
The angle()
method returns the angle of the vector in radians. You can use deg2rad()
and rad2deg()
to convert them into each other.
Edit: Formating and spelling errors.
1 Like
Is there a way you can smoothly rotate the Sprite instead of it just snapping into place?
1 Like
Instead of setting rotation directly, have a target_rotation and lerp / move_towards the target rotation.
2 Likes