Godot制作2D游戏(2)—— 存档读档

262 阅读1分钟

存档

# 场景名称=>{
# enemiesAlive=>[敌人的路径]
# }
var worldState:={}

# 存档路径
const SAVE_PATH:="user://data.sav"

# 游戏存档
func saveGame()->void:
	# 同步当前场景数据
	var scene=get_tree().current_scene
	var sceneName:=curSceneName()
	worldState[sceneName]=scene.toDict()
	# 生存的敌人及位置;玩家统计信息;当前加载场景的路径
	var data:={
		worldState=worldState,
		stats=playerStats.toDict(),
		scene=scene.scene_file_path,
		player={
			direction=scene.player.direction,
			position={
				x=scene.player.global_position.x,
				y=scene.player.global_position.y,
			},
		}
	}
	# 按文件路径写入数据
	var json:=JSON.stringify(data)
	var file:=FileAccess.open(SAVE_PATH,FileAccess.WRITE)
	if not file:return
	file.store_string(json)

读档

# 游戏读档
func loadGame()->void:
	var file:=FileAccess.open(SAVE_PATH,FileAccess.READ)
	if not file:return
	var json:=file.get_as_text()
	var data:=JSON.parse_string(json) as Dictionary

	changeScene(data.scene,{
		direction=data.player.direction,
		position=Vector2(
			data.player.position.x,
			data.player.position.y
		),
		init=func():
			worldState=data.worldState
			playerStats.fromDict(data.stats)
	})