0
\$\begingroup\$

My Problem

I am currently building a platformer game. I was attempting to use move_and_slide_with_snap for the first time and can't find it working for me. My character does snap to the ground like I expected, but I find that it still slides when it's on a slope. I think that I implemented the code properly with it.

If there is a solution I would love to hear it. What am I doing wrong?

func _physics_process(delta):


var current_gravity = GRAVITY - (int(is_on_wall() and inventory.Frog) * GRAVITY/2)
var current_jump_force = JUMP_FORCE

var x_input = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")

if x_input != 0:

    motion.x += x_input * ACCELERATION * delta
    motion.x = clamp(motion.x, -MAX_SPEED, MAX_SPEED)

else:

    playback.travel("Stand")

if !is_on_wall():
    if motion.y <= max_fall_speed:
        motion.y += current_gravity * delta
else:
    if motion.y <= max_slip_speed:
        motion.y += current_gravity * delta
    

if is_on_floor() or is_on_wall():
    if x_input == 0:
        motion.x = lerp(motion.x, 0, FRICTION)
        
    if Input.is_action_just_pressed("ui_up"):
        var can_jump = int(inventory.Spring)
        motion.y = -(current_jump_force + (JUMP_FORCE / 2.5 * can_jump))
else:
    
    if Input.is_action_just_released("ui_up") and motion.y < -JUMP_FORCE/2:
        motion.y = -current_jump_force/2
    
    if x_input == 0:
        motion.x = lerp(motion.x, 0, AIR_RESISTANCE)

if !motion.y:
    motion = move_and_slide_with_snap(motion, Vector2.DOWN * 320, Vector2.UP, true, 1)
else:
    motion = move_and_slide(motion, Vector2.UP)
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

I struggled with this for a long time. For me, the solution was centered around having a correct snap vector. Using get_floor_normal() as snap when not jumping resolved my problem. For example:

snap = get_floor_normal()
if is_on_floor():
  if Input.is_action_just_pressed("jump"):
    snap = Vector3.ZERO

move_and_slide_with_snap(velocity, snap, Vector3.UP, true, 4, max_slope_angle)

I took this example code from my own project which is why I have Vector3's. I believe it will work just the same for Vector2. Let me know if this solves the problem for you.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ You may also need to clamp your velocity. More information can be found here \$\endgroup\$
    – rawburt
    Commented Oct 7, 2020 at 19:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .