How do I not jump infinitely? Please help :)

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Wenguin

I dont know how to fix, theres an error near the bottem of the code when it says

if is_on_floor():
if Input.is_action_pressed("jump"):
    velocity.y = jump_impulse

This is the full on code:

extends KinematicBody

onready var anim_player =$AnimationPlayer
onready var camera = $Head/Camera
onready var raycast = $Head/Camera/RayCast

const MIN_CAMERA_ANGLE = -75
const GRAVITY = -30

export var camera_sensitivity: float = 0.05
export var speed: float = 10.0
export var acceleration: float = 6.0
export var jump_impulse: float = 12.0
var velocity: Vector3 = Vector3.ZERO

onready var head: Spatial = $Head

func _ready():

func _physics_process(delta):
var movement = _get_movement_direction()
velocity.x = lerp(velocity.x,movement.x * speed,acceleration * delta)
velocity.z = lerp(velocity.z,movement.z * speed,acceleration * delta)
velocity.y += GRAVITY * delta
velocity = move_and_slide(velocity)

func _unhandled_input(event):
if event is InputEventMouseMotion:

func _handle_camera_rotation(event):
rotate_y(deg2rad(-event.relative.x * camera_sensitivity))
head.rotate_x(deg2rad(-event.relative.y * camera_sensitivity))
head.rotation.x = clamp(head.rotation.x, deg2rad(MIN_CAMERA_ANGLE), deg2rad(MAX_CAMERA_ANGLE))

func _get_movement_direction():
var direction = Vector3.DOWN

if Input.is_action_pressed("forward"):
	direction -= transform.basis.z
if Input.is_action_pressed("backwards"):
	direction += transform.basis.z
if Input.is_action_pressed("left"):
	direction -= transform.basis.x
if Input.is_action_pressed("right"):
	direction += transform.basis.x
if Input.is_action_just_pressed("jump"):
	velocity.y = jump_impulse
	if is_on_floor():
if Input.is_action_pressed("jump"):
    velocity.y = jump_impulse

return direction

If you guys find how to fix let me know plz :slight_smile:

:bust_in_silhouette: Reply From: David000

What I would do is I would make an bool variable called isJumping (var isJumping = false)

Then add an elif like this: elif !is_on_floor():

In it set isJumping to equal to false

Then change the is_on_floor() to is_on_floor() and isJumping == false

Lastly at the top of that if statement, set isJumping equal to false

If that doesn’t work, the answer is probably somewhere along those lines, hope this helps!

Hi thanks for trying but now it is saying that the elif is misplaced and when it says

isjumping = false

then it says unexpected ident cation

Wenguin | 2022-04-25 16:09