《装备回收系统制作》教案
一、教学目标
- 知识目标:掌握游戏中“装备回收系统”的核心制作流程,包括界面设计、脚本逻辑(循环读表、勾选状态判断)、回收规则配置(CSV表)及变量管理。
- 能力目标:能独立完成装备回收界面搭建、脚本编写(含循环、条件判断)、回收规则表配置及功能调试。
- 情感目标:理解游戏功能设计的用户需求导向(如便捷性、可配置性),培养严谨的逻辑思维与调试习惯。
二、教学重难点
- 重点:装备回收界面布局(背景图、列表容器、勾选组件)、脚本循环读表与勾选状态存储、回收规则CSV表配置。
- 难点:勾选状态与回收组别的关联逻辑(T变量存储)、回收类型(经验/元宝/金币)与物品的动态绑定、变量作用域(个人变量与全局变量)的区分。
三、教学准备
- 开发工具:游戏引擎(如M2引擎)、脚本编辑器、CSV表格编辑器、VS Code(用于批量编辑表格)。
- 辅助材料:示例装备回收界面模板、预置CSV表(含装备ID与回收规则)、常见装备列表(沃玛/祖玛装备等)。
- 学生基础:熟悉基础脚本语法(变量、循环、条件判断),了解游戏物品与界面组件配置逻辑。
四、教学过程
环节1:课程导入(5分钟)
- 提问互动:“玩家在游戏中如何处理闲置装备?装备回收系统需要实现哪些核心功能?”(引导学生思考:界面交互、勾选装备、回收规则、奖励发放)
- 明确目标:本节课将完成装备回收系统的全流程制作,覆盖界面设计→脚本逻辑→规则配置→调试优化。
环节2:界面设计与组件搭建(15分钟)
目标:搭建装备回收界面,包含背景图、勾选组件、列表容器及功能按钮。
-
界面布局:
- 背景图:选择深色背景(如
bg_equipment_recycle.png ),调整尺寸适配界面(1024×768)。
- 标题与提示:添加“装备回收”标题(黄色字体,25号),下方添加温馨提示(白色字体,25号,如“勾选需回收的装备,点击一键回收”)。
- 列表容器:放置列表容器(位置:X=50,Y=100,宽=900,高=500),用于动态加载可回收装备。
- 功能按钮:添加“一键勾选”“一键取消”“回收”按钮(位置:底部居中,间距20px)。
-
动态组件配置:
- 勾选组件:使用图片组件(如
checkbox_unselected.png 和checkbox_selected.png )作为勾选框,关联变量(如T100,存储回收组别字符串)。
- 装备信息:每个勾选框关联装备名称(白色字体,20号)和回收描述(灰色字体,18号),通过循环动态加载。
环节3:脚本逻辑编写(30分钟)
子环节3.1:读表与循环加载装备
- 目标:通过CSV表读取可回收装备数据,循环加载至列表容器。
-
CSV表配置(CFG_EquipmentRecycle.csv ):
装备名称 |
装备ID |
回收组别 |
经验奖励 |
元宝奖励 |
金币奖励 |
重盔甲 |
1001 |
1001 |
50000 |
10 |
20000 |
祖玛裁决 |
2005 |
1001 |
80000 |
20 |
30000 |
战神盔甲 |
3002 |
1002 |
100000 |
30 |
50000 |
-
脚本逻辑:
-- 读取回收规则表
local recycleTable = ReadCSV("CFG_EquipmentRecycle");
local maxRow = GetTableMaxRow(recycleTable); -- 获取总行数
-- 循环加载装备到列表容器
for i = 1, maxRow do
local row = recycleTable[i];
local equipName = row[1]; -- 装备名称
local equipID = row[2]; -- 装备ID
local group = row[3]; -- 回收组别
-- 创建勾选框组件(挂载到列表容器)
local checkbox = CreateImage("checkbox_unselected.png", 50 + (i-1)*30, 120);
SetImageLink(checkbox, "checkbox_selected.png", 1); -- 勾选时切换图片
SetVariableLink(checkbox, "T100", group); -- 绑定回收组别到T100变量
-- 创建装备名称文本
local nameText = CreateText(equipName, 90 + (i-1)*30, 125, 20, "white");
-- 创建回收描述文本(经验/元宝/金币)
local descText = CreateText("经验:"..row[4].." 元宝:"..row[5].." 金币:"..row[6], 90 + (i-1)*30, 150, 18, "gray");
end
子环节3.2:勾选状态判断与回收组别存储
- 目标:通过T变量存储玩家勾选的回收组别,实现动态判断。
-
勾选状态检测:
-- 监听勾选框点击事件
if (GetClickImageID() == checkbox) then
local currentGroup = GetVariable("T100"); -- 获取当前勾选的回收组别
if (string.find(currentGroup, group)) then -- 若已勾选该组别
SetImageLink(checkbox, "checkbox_unselected.png", 1); -- 取消勾选
SetVariable("T100", string.replace(currentGroup, group, "")); -- 从T100中移除该组别
else -- 未勾选
SetImageLink(checkbox, "checkbox_selected.png", 1); -- 勾选
SetVariable("T100", currentGroup .. ";" .. group); -- 追加到T100
end
end
-
一键勾选/取消逻辑:
-- 一键勾选按钮点击事件
if (GetClickButtonID() == "btn_select_all") then
local allGroups = "1001;1002"; -- 所有回收组别(可从表读取)
SetVariable("T100", allGroups); -- 直接赋值所有组别
-- 刷新勾选框状态(循环重新设置图片)
for i = 1, maxRow do
local checkbox = GetImageByID(50 + (i-1)*30, 120);
local group = recycleTable[i][3];
if (string.find(allGroups, group)) then
SetImageLink(checkbox, "checkbox_selected.png", 1);
else
SetImageLink(checkbox, "checkbox_unselected.png", 1);
end
end
end
-- 一键取消按钮点击事件
if (GetClickButtonID() == "btn_cancel_all") then
SetVariable("T100", ""); -- 清空T100
-- 刷新勾选框状态
for i = 1, maxRow do
local checkbox = GetImageByID(50 + (i-1)*30, 120);
SetImageLink(checkbox, "checkbox_unselected.png", 1);
end
end
子环节3.3:回收功能实现
- 目标:根据勾选的回收组别,发放对应奖励(经验/元宝/金币)。
-
回收按钮点击事件:
if (GetClickButtonID() == "btn_recycle") then
local selectedGroups = GetVariable("T100"); -- 获取勾选的回收组别
if (selectedGroups == "") then
ShowMessage("请至少勾选一个装备!");
return;
end
-- 遍历所有装备,匹配回收组别并发放奖励
for i = 1, maxRow do
local row = recycleTable[i];
local group = row[3];
if (string.find(selectedGroups, group)) then
-- 发放经验
AddExp(row[4]);
-- 发放元宝(绑定元宝需调整变量)
AddBoundYuanBao(row[5]);
-- 发放金币
AddGold(row[6]);
-- 从玩家背包移除装备(需调用背包API)
RemoveItem(row[2], 1);
end
end
ShowMessage("回收成功!获得经验:"..totalExp.." 元宝:"..totalYuanBao.." 金币:"..totalGold);
SetVariable("T100", ""); -- 清空勾选状态
end
环节4:回收规则配置与变量管理(15分钟)
目标:通过CSV表灵活配置回收规则,理解变量作用域。
-
回收规则表设计:
- 固定格式:直接填写经验/元宝/金币数量(适用于单一奖励类型)。
- 变量条件:通过自定义变量(如
回收类型 )动态判断奖励类型(适用于多种奖励)。
-
变量声明与作用域:
- 个人变量(如
T100 ):存储玩家勾选的回收组别,需在登录触发 中声明(DeclareVariable("T100", "string", "") )。
- 全局变量:存储系统级配置(如默认回收组别),需在
服务器启动触发 中声明。
环节5:调试与常见问题(10分钟)
- 问题1:勾选框未显示选中状态→检查
SetImageLink 是否关联正确图片,T100 变量是否正确更新。
- 问题2:回收无奖励→检查CSV表中奖励数值是否正确,
AddExp /AddBoundYuanBao 等API是否调用成功。
- 问题3:一键勾选无效→检查
allGroups 是否包含所有回收组别,循环刷新勾选框状态是否执行。
调试技巧:使用Print() 函数输出变量值(如Print(selectedGroups) ),逐步排查逻辑错误。
环节6:课堂练习与总结(5分钟)
- 练习任务:在教师指导下,尝试添加“自动回收”功能(背包满时自动触发回收),并配置不同装备的回收规则。
- 总结:装备回收系统的核心是“界面交互+数据驱动+脚本逻辑”,需关注用户操作的便捷性(如一键勾选)和规则的灵活性(如CSV表配置)。
板书设计:
装备回收系统流程:
界面搭建(背景/列表/按钮) → 脚本读表循环 → 勾选状态存储(T变量) → 回收规则匹配 → 奖励发放
课后反思:通过实操演示与问题调试,学生需掌握脚本逻辑与数据表的联动,后续可扩展至“限时回收”“跨服回收”等复杂功能。
|