Hello everyone!
I’m new to game development and recently started developing my first game, a simple 2D game to better understand the platform’s functionalities.
I’m having trouble adjusting the checkpoint saving system in my game. I’ve tried using tutorials and other internet answers, but it’s not working, as if the checkpoint isn’t saving to the “user://” file.
My current code looks like this; I removed some parts as I was almost giving up on implementing save/load.
Can you help me? Thank you in advance for your attention!
title_screen.gd (main scene archive):
extends Control
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Não é necessário implementar nada aqui
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass # Não é necessário implementar nada aqui
func _on_start_btn_pressed():
var checkpoint_position = load_checkpoint()
if checkpoint_position != null:
Globals.player.position = checkpoint_position
# Transição para a cena do checkpoint carregado
get_tree().change_scene(Globals.current_checkpoint_scene)
else:
# Código para iniciar o jogo normalmente caso não haja um checkpoint salvo
get_tree().change_scene("res://levels/world_01.tscn")
func _on_new_btn_pressed():
get_tree().change_scene("res://levels/world_01.tscn")
func _on_credits_btn_pressed():
# Implemente conforme necessário
pass
func _on_quit_btn_pressed():
save_checkpoint()
get_tree().quit()
checkpoint.gd:
extends Area2D
var is_active = false
func _on_body_entered(body):
if body.name == "player" and !is_active:
activate_checkpoint()
func activate_checkpoint():
Globals.current_checkpoint = self
Globals.current_checkpoint_scene = get_tree().current_scene
is_active = true
globals.gd (archive global):
extends Node
var player = null
var current_checkpoint = null
var current_checkpoint_scene = ""
var checkpoint_save_path = "user://checkpoint.sav"
func _ready():
load_checkpoint_from_file()
func respawn_player():
if current_checkpoint != null:
player.position = current_checkpoint.global_position
func load_checkpoint():
if current_checkpoint != null:
return current_checkpoint.global_position
return null
func save_checkpoint():
if current_checkpoint != null:
var file = File.new()
file.open(checkpoint_save_path, File.WRITE)
file.store_string(current_checkpoint_scene + "\n")
file.store_string(str(current_checkpoint.global_position.x) + "," + str(current_checkpoint.global_position.y) + "\n")
file.close()
func load_checkpoint_from_file():
if not File.exists(checkpoint_save_path):
return
var file = File.new()
file.open(checkpoint_save_path, File.READ)
if file.eof_reached:
file.close()
return
Globals.current_checkpoint_scene = file.get_line().strip_edges()
var pos_str = file.get_line().strip_edges()
file.close()
var pos = pos_str.split(",")
if pos.size() == 2:
current_checkpoint = Vector2(float(pos[0]), float(pos[1]))
file.close()
Thank you for your help!