Anyway to offset a specific animation on a AnimatedSprite2D?

Godot Version

Godot 4.4

Question

Hello people!
Today I realised i have a problem with a specific animation (a jump animation) from an Asset pack i purchased time ago: it is structured in such a way that the character is lower on the screen respect to other animations.
Is there a way to offset that specific animation?

My only idea was to set it in code when i make the change to the jump animation but I fear that there will be some instant in which the sprite is seen clipping through the floor basically.

I’m using this atm

extends CharacterBody2D
@onready var character_sprite: AnimatedSprite2D = $character_sprite


const SPEED = 300.0
const JUMP_VELOCITY = -400.0


func _physics_process(delta: float) -> void:
	# Add the gravity.
	if not is_on_floor():
		velocity += get_gravity() * delta

	# Handle jump.
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = JUMP_VELOCITY
		character_sprite.animation = "jump"
	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var direction := Input.get_axis("ui_left", "ui_right")
	if direction:
		velocity.x = direction * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
		
	var isLeft = velocity.x < 0
	character_sprite.flip_h = isLeft

	move_and_slide()

I tried this way

extends CharacterBody2D
@onready var character_sprite: AnimatedSprite2D = $character_sprite


const SPEED = 300.0
const JUMP_VELOCITY = -400.0


func _physics_process(delta: float) -> void:
	# Add the gravity.
	if not is_on_floor():
		velocity += get_gravity() * delta
		character_sprite.animation = "jump"
		character_sprite.offset.y = -32
	else:
		character_sprite.animation = "idle"

	# Handle jump.
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = JUMP_VELOCITY

	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var direction := Input.get_axis("ui_left", "ui_right")
	if direction:
		velocity.x = direction * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
		
	var isLeft = velocity.x < 0
	character_sprite.flip_h = isLeft

	move_and_slide()

But like this the sprite like disappears then freezes, I’m legit so confused

Can you fix it in the source data? Presumably (given it’s a sprite) it’s either a matter of moving the cels on the sprite sheet, or tweaking Y offset values. What format is this?

I ended up doing that.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.