game physics - More ideas of how to prevent slope slide down with KinematicBody2D? -
i have basic code below. trying player not slide down on slopes. slopes 45°. if player stop movement on slope, slide down (maybe because velocity.y += delta * gravity.y). can angle normal , set velocity.y = 0 when player on slope , not slide down. not sure if best approach. have ideas of how can achieve this? way, there way project_settings values on gdscript (ie. default_gravity)?
extends kinematicbody2d var gravity = vector2(0,700) var velocity = vector2() var hspeed = 150 var onslope = false func _ready(): set_fixed_process(true) pass func _fixed_process(delta): var left = input.is_action_pressed("ui_left") var right = input.is_action_pressed("ui_right") if left: velocity.x = -hspeed if right: velocity.x = hspeed if !left && ! right: velocity.x = 0 velocity.y += delta * gravity.y # if onslope && !left && !right: # velocity.y = 0 # else: # velocity.y += delta * gravity.y var movement = delta * velocity move(movement) if is_colliding(): var normal = get_collision_normal() var angle = getanglebynormal(normal) # can angle here # if angle == 0 player on ground # if abs(angle) > 0 && abs(angle) < 90 player on slope |> onslope = true velocity = normal.slide(velocity) movement = normal.slide(movement) move(movement) pass func getanglebynormal(normal): var inversenormal = normal * -1 var angle = inversenormal.angle() angle = round(rad2deg(angle)) return angle pass
Comments
Post a Comment