尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

vaststars科技树实现解析:techtree与laboratory研究队列系统全攻略

vaststars科技树实现解析:techtree与laboratory研究队列系统全攻略 vaststars科技树实现解析techtree与laboratory研究队列系统全攻略【免费下载链接】vaststarsA game demo for Ant engine项目地址: https://gitcode.com/gh_mirrors/va/vaststarsvaststars 是一款基于 Ant 引擎的火星工厂模拟游戏其科技树系统techtree与实验室laboratory研究队列是游戏成长线的核心。本文带你从 C 内核到 Lua 表现层完整拆解这套数据驱动 状态机的科研系统是如何实现的帮助新手理解游戏科技树设计的通用思路。整体架构三层分工各司其职 ️科技树系统横跨项目的三层代码职责清晰层级位置职责C 内核clibs/gameplay/src/core/techtree.cpp进度存储、队列管理、材料匹配实验室逻辑clibs/gameplay/src/system/laboratory.cpp研究状态机、每帧推进Lua 表现层startup/pkg/vaststars.gamerender/科技列表过滤、UI 数据模型、3D 渲染C 层负责算得快Lua 层负责配得灵活——所有科技节点、前置条件、解锁效果都写在 Lua 原型文件里无需重新编译 C 即可调整玩法。techtree_mgr四个核心数据结构打开clibs/gameplay/src/core/techtree.h整个科技树管理器只有四个成员麻雀虽小五脏俱全progresstechid → 当前进度的映射记录每项科技研究到哪一步researched已完成科技的集合UI 层的待研究/已研究分类全靠它queue研究队列玩家点开始研究时科技 ID 入队cache材料匹配缓存避免每个实验室每帧重复计算配方两个细节值得关注research_add的完成判定techtree.cpp第 43 行每次实验室交付一批材料进度 1当进度达到原型的count值时科技自动进入researched集合同时清掉缓存——因为研究完成后该科技不再需要材料匹配。队列是后进先出queue_top()取的是queue.back()玩家最新选定的科技会立即抢占实验室符合随时改研究方向的操作直觉。研究队列如何驱动全部实验室 队列与实验室的联动逻辑在laboratory.cpp的lupdate函数中每帧取出队列头部科技queue_top()若某台实验室当前研究的科技 ≠ 队列头部调用laboratory_next_tech切换目标切换时旧科技已收取但没研究完的材料会退还箱内保证玩家随时改方向不亏材料一旦某台实验室完成一项科技research_add返回完成弹出队列尾部并广播通知所有实验室切换下一项。这套机制意味着全局只有一条研究流水线多台实验室可以并行消耗材料、分摊研究时间——和《异星工厂》的科研站设计如出一辙。实验室状态机三态流转详解 laboratory.cpp用三个状态驱动整个研究流程IDLE ──收取材料成功──▶ DONE ──进度交付完成──▶ 切换/下一批 ▲ │ └──材料不足/无电──────────┘ 科技材料无法匹配时进入 INVALID 挂起IDLE等料从箱子chest::pickup收取该科技要求的材料收齐则进入 DONE否则原地等待物流送料DONE倒计时progress按每秒 100 计初始化每帧progress - l.speed实验室速度归零后把 1 点研究进度交付给全局 techtreeINVALID不可研究由get_ingredients判定——它拿实验室的输入槽位类型inputs与科技所需材料列表ingredients做匹配若实验室收不了科技要求的某类材料直接判无效get_ingredients是理解实验室为什么不能研究某科技的关键它按实验室槽位顺序生成实际收取配方并缓存到cache槽位数量与科技材料种类必须一一对应。数据驱动的科技原型配置 所有科技节点定义在startup/pkg/vaststars.prototype/tech/tech1.lua~tech5.lua按章节拆分。每个科技原型包含prerequisites前置科技形成树状依赖count/time总进度需求与每点进度耗时ingredients研究材料effects.unlock_recipe研究完成后解锁的配方列表列表过滤逻辑在startup/pkg/vaststars.gamerender/gameplay/interface/science.lua的update_tech_list遍历整棵tech_tree已研究的归入finish_list前置全部满足的归入tech_list其余对玩家隐藏。这样玩家在任何时刻看到的都是当前可研究的精确集合科技树 UI 无需自行判断依赖关系。UI 层从面板到 3D 货架 ️科研面板数据模型startup/pkg/vaststars.gamerender/ui_datamodel/science.lua组装每个科技的名称、材料图标、进度条、开始研究/暂停按钮状态并通过research_queue {name}或research_queue {}控制研究启停实验室货架渲染startup/pkg/vaststars.gamerender/render_updates/laboratory.lua在实验室模型上挂载 6 个货架挂点slot1~slot6按箱内物品动态生成/销毁 3D 物品模型玩家一眼就能看出每台实验室在吃什么总结可以复用的设计要点 ✅C 管状态Lua 管配置——科技树数据热更无需重编译全局单队列 多实验室并行——简单的队列即可实现灵活的科研调度三态状态机 材料退还——方向随时可改玩家零损失槽位-材料匹配缓存——把能不能研究的计算从每帧降到一次如果你想动手研究源码建议按techtree.h→laboratory.cpp→science.lua的顺序阅读从数据结构到状态机再到表现层一天即可吃透整个系统。【免费下载链接】vaststarsA game demo for Ant engine项目地址: https://gitcode.com/gh_mirrors/va/vaststars创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表