技能选择面板 (SkillSelectMenu) 完整实现分析
本文最后更新于186 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

初始化阶段 (行18-34):

  • 信号连接 (行20-30):
  • 连接技能列表的选择和激活信号
  • 连接使用按钮和取消按钮的点击信号
  • 使用条件判断确保信号只连接一次,避免重复连接
func _ready() -> void:
	# 连接信号
	if !skill_list.item_selected.is_connected(_on_skill_item_selected):
		skill_list.item_selected.connect(_on_skill_item_selected)
	
	if !skill_list.item_activated.is_connected(_on_skill_item_activated):
		skill_list.item_activated.connect(_on_skill_item_activated)
	
	if !use_button.pressed.is_connected(_on_use_button_pressed):
		use_button.pressed.connect(_on_use_button_pressed)
	
	if !cancel_button.pressed.is_connected(_on_cancel_button_pressed):
		cancel_button.pressed.connect(_on_cancel_button_pressed)
	
	# 初始隐藏并禁用使用按钮
	hide()
	use_button.disabled = true
  • 初始状态设置 (行32-34):
  • 默认隐藏面板: hide()
  • 禁用使用按钮: use_button.disabled = true
  • 确保面板在未使用时不显示,且使用按钮初始状态为不可用

菜单显示流程 (行36-57):

  • 1. 数据初始化 (行38-42):
  • 存储角色技能数据: self.current_character_skills = character_skills
  • 清空技能列表: skill_list.clear()
  • 重置描述文本: skill_description.text = “选择一个技能查看描述…”
  • 重置选择索引: selected_skill_index = -1
  • 禁用使用按钮: use_button.disabled = true
  • 2. 技能列表构建 (行44-53):
  • 遍历角色技能数组: for i in range(character_skills.size())
  • 获取技能数据: var skill: SkillData = character_skills[i]
  • 构建显示文本: skill.skill_name + ” (MP: ” + str(skill.mp_cost) + “)”
  • 添加到技能列表: skill_list.add_item(item_text)
  • MP检查与状态设置:
    • 判断MP是否足够: if caster_mp < skill.mp_cost
    • 禁用不足MP的技能: skill_list.set_item_disabled(i, true)
    • 设置灰色文本: skill_list.set_item_custom_fg_color(i, Color(0.5, 0.5, 0.5))
  • 显示面板: show()
  • 获取焦点: skill_list.grab_focus() ,支持键盘操作
func show_menu(character_skills: Array[SkillData], caster_mp: int) -> void:
	self.current_character_skills = character_skills
	skill_list.clear()
	skill_description.text = "选择一个技能查看描述..."
	selected_skill_index = -1
	use_button.disabled = true

	for i in range(character_skills.size()):
		var skill: SkillData = character_skills[i]
		if skill:
			var item_text = skill.skill_name + " (MP: " + str(skill.mp_cost) + ")"
			skill_list.add_item(item_text)
			
			# 根据MP是否足够,设置项目是否可用
			if caster_mp < skill.mp_cost:
				skill_list.set_item_disabled(i, true)
				skill_list.set_item_custom_fg_color(i, Color(0.5, 0.5, 0.5)) # 灰色表示不可用
	
	show()
	# 获取焦点以便键盘操作
	skill_list.grab_focus()

2. 技能选择阶段

交互方式 :鼠标点击技能项 / 键盘方向键选择

内部逻辑 ( _on_skill_item_selected 函数,行60-66):

  1. 验证选择 :检查索引是否有效
  2. 状态更新 :
  • 记录当前选择的技能索引
  • 显示技能详细描述
  • 根据技能可用性更新使用按钮状态(可用/禁用)

3. 技能使用阶段

触发方式 :

  • 点击”使用”按钮
  • 双击可用的技能项
    内部逻辑 :
  1. 按钮点击 ( _on_use_button_pressed 函数,行75-80):
  • 验证选择的技能是否有效且可用
  • 发出 skill_selected 信号,传递选中的技能数据
  • 隐藏面板
  1. 双击技能 ( _on_skill_item_activated 函数,行69-72):
  • 调用选择处理函数更新状态
  • 检查技能是否可用
  • 如果可用,自动调用使用按钮的处理逻辑

4. 取消操作阶段

触发条件 :点击”取消”按钮

内部逻辑 ( _on_cancel_button_pressed 函数,行83-85):

隐藏面板

发出 skill_selection_cancelled 信号

## 当选择了技能项
func _on_skill_item_selected(index: int) -> void:
	if index >= 0 and index < current_character_skills.size():
		selected_skill_index = index
		var skill: SkillData = current_character_skills[index]
		if skill:
			skill_description.text = skill.description
			use_button.disabled = skill_list.is_item_disabled(index)

## 当双击了技能项
func _on_skill_item_activated(index: int) -> void:
	_on_skill_item_selected(index)
	if !use_button.disabled:
		_on_use_button_pressed()

## 当点击使用按钮
func _on_use_button_pressed() -> void:
	if selected_skill_index >= 0 and selected_skill_index < current_character_skills.size():
		var skill: SkillData = current_character_skills[selected_skill_index]
		if skill and !skill_list.is_item_disabled(selected_skill_index):
			skill_selected.emit(skill)
			hide()

## 当点击取消按钮
func _on_cancel_button_pressed() -> void:
	skill_selection_cancelled.emit()
	hide()
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇