Godot中如何将角色选择场景选中的玩家加载到世界场景?
Godot 2D角色选择场景加载问题解决方案
问题核心错误
你的代码存在3个关键逻辑问题,导致角色选择后无法在世界场景正确加载:
- 角色选择场景的
match分支缩进错误,会触发语法报错 - 点击Play按钮时错误地将数字类型的
PlayerSelect赋值为字符串,打乱了状态管理逻辑 - 世界场景未正确从Autoload单例中获取选中的角色场景资源
逐步修复代码
1. 修正角色选择场景脚本
修复缩进问题,同时调整Play按钮的逻辑,不再覆盖数字索引变量,而是通过索引推导选中的角色标识:
extends Node2D func _process(delta): match CharacterSelected.PlayerSelect: 0: get_node("PlayerSelect").play("C1") 1: get_node("PlayerSelect").play("C2") 2: get_node("PlayerSelect").play("C3") 3: get_node("PlayerSelect").play("C4") 4: get_node("PlayerSelect").play("C5") 5: get_node("PlayerSelect").play("C6") 6: get_node("PlayerSelect").play("C7") 7: get_node("PlayerSelect").play("C8") func _on_Left_pressed(): if CharacterSelected.PlayerSelect > 0: CharacterSelected.PlayerSelect -= 1 func _on_Right_pressed(): # 8个角色对应索引0-7,所以上限设为7 if CharacterSelected.PlayerSelect < 7: CharacterSelected.PlayerSelect += 1 func _on_Play_pressed(): # 通过数字索引推导角色标识(C1-C8) var selected_key = "C" + str(CharacterSelected.PlayerSelect + 1) CharacterSelected.selected_character_key = selected_key get_tree().change_scene("res://Level 1.tscn")
2. 更新Autoload单例脚本
新增变量存储选中的角色标识,区分数字索引和角色场景映射:
extends Node # 角色场景映射字典 var character_scenes = { "C1" : preload("res://C1r.tscn"), "C2" : preload("res://C2.tscn"), "C3" : preload("res://C3.tscn"), "C4" : preload("res://C4.tscn"), "C5" : preload("res://C5.tscn"), "C6" : preload("res://C6.tscn"), "C7" : preload("res://C7.tscn"), "C8" : preload("res://C8.tscn") } var PlayerSelect = 0 # 数字索引,0-7对应C1-C8 var selected_character_key = "C1" # 默认选中第一个角色
3. 修正世界场景脚本
直接从Autoload的预加载字典中获取角色场景并实例化:
extends Node2D func _ready(): # 从单例中获取选中的角色场景 var selected_scene = CharacterSelected.character_scenes[CharacterSelected.selected_character_key] var player_character = selected_scene.instance() add_child(player_character)
额外优化建议
- 可以用数组简化
match分支的冗余代码:var anim_names = ["C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8"] func _process(delta): var anim_name = anim_names[CharacterSelected.PlayerSelect] get_node("PlayerSelect").play(anim_name) - 确认按钮的
pressed信号已在编辑器中正确连接到脚本对应函数(右键按钮→连接信号)
内容的提问来源于stack exchange,提问作者Chiyome Mazuko
相关产品推荐
相关产品推荐

