Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему не работает JSON-сохранение в Godot 4?

Snegovik Dev Ученик (136), на голосовании 2 месяца назад
Сохранение работает на одиночных объектах, но на контейнерах - нет. Почему?

const FILE_NAME = "user://game-data.json"
var tosave = {
"authorizated" : authorizated,
"name" : username
}
func _save()->void:
print(ProjectSettings.globalize_path(FILE_NAME))
var save_file = FileAccess.open (FILE_NAME, FileAccess.WRITE)
save_ file.store _line(JSON.stringify(tosave))
save_file.close()
func _load() -> void:
var save_file = FileAccess.open (FILE_NAME, FileAccess.READ )

while save_file.get_position() < save_file.get_length():
var json = JSON.new ()
json.parse(save_file.get_line())
var node_data = json.get_data()

tosave = node_data
save_file.close()
Голосование за лучший ответ
S.H.I. Оракул (69989) 3 месяца назад
 const FILE_NAME = "user://game-data.json" 

# Функция для преобразования данных в сериализуемый формат
func make_serializable(data):
match typeof(data):
TYPE_ARRAY:
var serialized = []
for item in data:
serialized.append(make_serializable(item))
return serialized
TYPE_DICTIONARY:
var serialized = {}
for key in data:
serialized[key] = make_serializable(data[key])
return serialized
TYPE_OBJECT:
if data is Resource:
return {"resource_path": data.resource_path}
return str(data) # Для объектов, которые нельзя сериализовать
_:
return data

func _save() -> void:
var serialized_data = make_serializable(tosave)
var save_file = FileAccess.open(FILE_NAME, FileAccess.WRITE)
save_file.store_line(JSON.stringify(serialized_data))
save_file.close()

func _load() -> void:
if not FileAccess.file_exists(FILE_NAME):
return

var save_file = FileAccess.open(FILE_NAME, FileAccess.READ)
var json = JSON.new()
var parse_result = json.parse(save_file.get_line())

if parse_result == OK:
tosave = json.get_data()
save_file.close()
Snegovik DevУченик (136) 3 месяца назад
всё равно не работает.
Похожие вопросы