#Guy flies into the void

4 messages · Page 1 of 1 (latest)

humble breach
#

So, I'm coding a State machine for a player character. Problem is, when i press the Jump input, there seems to be no way for the guy to start falling and he remains in the jump state forever.

Code:

jump state:

extends State
@export var player: Player
var state_name = "jump"


func enter():
    print("transitioned to jump")
    
func exit():
    print("exited jump")
    
@warning_ignore("unused_parameter")
func process(delta: float): 
    if player.velocity.y == 0:
        Transition.emit("idle")
    elif player.velocity.y > 0:
        Transition.emit("fall")
    player.velocity.y = player.jumpForce
    if player.velocity.y < 0:
        player.player_anim.play("jump")

fall state:

extends State
@export var player: Player
var state_name = "fall"


func enter():
    print("transitioned to fall")
    
func exit():
    print("exited fall")
    
@warning_ignore("unused_parameter")
func process(delta: float): 
    if player.is_on_floor():
        Transition.emit("idle")
    elif player.velocity.y < 0:
        Transition.emit("jump")
    player.velocity.y += player.gravity * delta
    player.player_anim.play("fall")

player code:

extends CharacterBody2D
class_name Player

var gravity = 100

@export var moveSpeed = 300
@export var jumpForce = -300

@onready var sprite_2d = $Sprite2D
@onready var player_anim = $PlayerAnim
var direction = Input.get_axis("move_left", "move_right")


@warning_ignore("unused_parameter")
func _physics_process(delta):
    direction = Input.get_axis("move_left", "move_right")
    move_and_slide()
    if not is_on_floor():
        velocity.y += gravity * delta

whole spade
#

i think its because you are applying the jump force every frame. try putting it in the entered

#

func

humble breach
#

aight thanks