Godot Version
4.21
Question
Just learning the engine and trying to flip the player sprite when it moves from left to right or vice versa. The game won’t run with this code, however. I might be missing something completely obvious, but I can’t figure it out for the life of me.
using Godot;
using System;
public partial class main_character : CharacterBody2D
{
public const float Speed = 300.0f;
public const float JumpVelocity = -400.0f;
// Sprite variable for the main sprite
@onready var animated_sprite_2d = $AnimatedSprite2D
// Get the gravity from the project settings to be synced with RigidBody nodes.
public float gravity = ProjectSettings.GetSetting("physics/2d/default_gravity").AsSingle();
public override void _PhysicsProcess(double delta)
{
Vector2 velocity = Velocity;
// Add the gravity.
if (!IsOnFloor())
velocity.Y += gravity * (float)delta;
// Handle Jump.
if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
velocity.Y = JumpVelocity;
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
if (direction != Vector2.Zero)
{
velocity.X = direction.X * Speed;
}
else
{
velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
}
Velocity = velocity;
MoveAndSlide();
bool isLeft = velocity.X < 0;
animated_sprite_2d.flip_h = isLeft;
}
}
Here are the problems: