【蓝胖子】TXT实战课程,装备回收

发表于:昨天 05:55 PM 9

视频课程

​《装备回收系统制作》教案​


​一、教学目标​

  1. ​知识目标​​:掌握游戏中“装备回收系统”的核心制作流程,包括界面设计、脚本逻辑(循环读表、勾选状态判断)、回收规则配置(CSV表)及变量管理。
  2. ​能力目标​​:能独立完成装备回收界面搭建、脚本编写(含循环、条件判断)、回收规则表配置及功能调试。
  3. ​情感目标​​:理解游戏功能设计的用户需求导向(如便捷性、可配置性),培养严谨的逻辑思维与调试习惯。

​二、教学重难点​

  • ​重点​​:装备回收界面布局(背景图、列表容器、勾选组件)、脚本循环读表与勾选状态存储、回收规则CSV表配置。
  • ​难点​​:勾选状态与回收组别的关联逻辑(T变量存储)、回收类型(经验/元宝/金币)与物品的动态绑定、变量作用域(个人变量与全局变量)的区分。

​三、教学准备​

  • ​开发工具​​:游戏引擎(如M2引擎)、脚本编辑器、CSV表格编辑器、VS Code(用于批量编辑表格)。
  • ​辅助材料​​:示例装备回收界面模板、预置CSV表(含装备ID与回收规则)、常见装备列表(沃玛/祖玛装备等)。
  • ​学生基础​​:熟悉基础脚本语法(变量、循环、条件判断),了解游戏物品与界面组件配置逻辑。

​四、教学过程​

​环节1:课程导入(5分钟)​
  • ​提问互动​​:“玩家在游戏中如何处理闲置装备?装备回收系统需要实现哪些核心功能?”(引导学生思考:界面交互、勾选装备、回收规则、奖励发放)
  • ​明确目标​​:本节课将完成装备回收系统的全流程制作,覆盖界面设计→脚本逻辑→规则配置→调试优化。

​环节2:界面设计与组件搭建(15分钟)​

​目标​​:搭建装备回收界面,包含背景图、勾选组件、列表容器及功能按钮。

  1. ​界面布局​​:

    • ​背景图​​:选择深色背景(如bg_equipment_recycle.png),调整尺寸适配界面(1024×768)。
    • ​标题与提示​​:添加“装备回收”标题(黄色字体,25号),下方添加温馨提示(白色字体,25号,如“勾选需回收的装备,点击一键回收”)。
    • ​列表容器​​:放置列表容器(位置:X=50,Y=100,宽=900,高=500),用于动态加载可回收装备。
    • ​功能按钮​​:添加“一键勾选”“一键取消”“回收”按钮(位置:底部居中,间距20px)。
  2. ​动态组件配置​​:

    • ​勾选组件​​:使用图片组件(如checkbox_unselected.pngcheckbox_selected.png)作为勾选框,关联变量(如T100,存储回收组别字符串)。
    • ​装备信息​​:每个勾选框关联装备名称(白色字体,20号)和回收描述(灰色字体,18号),通过循环动态加载。

​环节3:脚本逻辑编写(30分钟)​
​子环节3.1:读表与循环加载装备​
  • ​目标​​:通过CSV表读取可回收装备数据,循环加载至列表容器。
  1. ​CSV表配置​​(CFG_EquipmentRecycle.csv):

    装备名称 装备ID 回收组别 经验奖励 元宝奖励 金币奖励
    重盔甲 1001 1001 50000 10 20000
    祖玛裁决 2005 1001 80000 20 30000
    战神盔甲 3002 1002 100000 30 50000
  2. ​脚本逻辑​​:

    -- 读取回收规则表  
    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变量存储玩家勾选的回收组别,实现动态判断。
  1. ​勾选状态检测​​:

    -- 监听勾选框点击事件  
    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
    
  2. ​一键勾选/取消逻辑​​:

    -- 一键勾选按钮点击事件  
    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:回收功能实现​
  • ​目标​​:根据勾选的回收组别,发放对应奖励(经验/元宝/金币)。
  1. ​回收按钮点击事件​​:

    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表灵活配置回收规则,理解变量作用域。

  1. ​回收规则表设计​​:

    • ​固定格式​​:直接填写经验/元宝/金币数量(适用于单一奖励类型)。
    • ​变量条件​​:通过自定义变量(如回收类型)动态判断奖励类型(适用于多种奖励)。
  2. ​变量声明与作用域​​:

    • ​个人变量​​(如T100):存储玩家勾选的回收组别,需在登录触发中声明(DeclareVariable("T100", "string", ""))。
    • ​全局变量​​:存储系统级配置(如默认回收组别),需在服务器启动触发中声明。

​环节5:调试与常见问题(10分钟)​
  • ​问题1​​:勾选框未显示选中状态→检查SetImageLink是否关联正确图片,T100变量是否正确更新。
  • ​问题2​​:回收无奖励→检查CSV表中奖励数值是否正确,AddExp/AddBoundYuanBao等API是否调用成功。
  • ​问题3​​:一键勾选无效→检查allGroups是否包含所有回收组别,循环刷新勾选框状态是否执行。

​调试技巧​​:使用Print()函数输出变量值(如Print(selectedGroups)),逐步排查逻辑错误。


​环节6:课堂练习与总结(5分钟)​
  • ​练习任务​​:在教师指导下,尝试添加“自动回收”功能(背包满时自动触发回收),并配置不同装备的回收规则。
  • ​总结​​:装备回收系统的核心是“界面交互+数据驱动+脚本逻辑”,需关注用户操作的便捷性(如一键勾选)和规则的灵活性(如CSV表配置)。

​板书设计​​:

装备回收系统流程:  
界面搭建(背景/列表/按钮) → 脚本读表循环 → 勾选状态存储(T变量) → 回收规则匹配 → 奖励发放

​课后反思​​:通过实操演示与问题调试,学生需掌握脚本逻辑与数据表的联动,后续可扩展至“限时回收”“跨服回收”等复杂功能。

收藏
送赞
分享

发表回复