# Godot Platformer Lesson 1a: Player Movement¶

## Summary¶

This lesson covers player jumps.

## Errata¶

For this video there is a value updated at 1:02:26 that is not mentioned in the video.

## Code¶

### Actor Code¶

```extends KinematicBody2D
class_name Actor

const FLOOR_NORMAL = Vector2.UP

export var speed := Vector2(300, 1000)
export var gravity := 4000.0

var _velocity := Vector2.ZERO
```

### Player Code¶

```extends Actor

func _physics_process(delta):
var is_jump_interrupted: = Input.is_action_just_released("jump") and _velocity.y < 0
var direction := get_direction()
_velocity = calculate_move_velocity(_velocity, direction, speed, is_jump_interrupted)
_velocity = move_and_slide(_velocity, FLOOR_NORMAL)

func get_direction() -> Vector2:
return Vector2(
Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
-1.0 if Input.is_action_just_pressed("jump") and is_on_floor() else 0.0
)

func calculate_move_velocity(linear_velocity: Vector2, direction: Vector2, speed: Vector2, is_jump_interrupted: bool) -> Vector2:
var new_velocity: = linear_velocity
new_velocity.x = speed.x * direction.x
new_velocity.y += gravity * get_physics_process_delta_time()
if direction.y == -1:
new_velocity.y = speed.y * direction.y
if is_jump_interrupted:
new_velocity.y = 0
return new_velocity
```

## Common Problems¶

• Player not jumping when on floor:
• Sometimes `is_on_floor()` can be a bit buggy. If you supply a second argument to `move_and_slide()` then it will know which direction the floor (or rather the ceiling) is. So we want `velocity = move_and_slide(velocity, Vector2.UP)`. This is covered in the video if you are patient, but it can seem like you made a mistake if you’re testing your code as you go.