幕:Undo 系統(tǒng)與 QA 自動校驗架構(gòu)是如何煉成的)
Bladecoder Adventure Engine 編輯器內(nèi)幕Undo 系統(tǒng)與 QA 自動校驗架構(gòu)是如何煉成的【免費下載鏈接】bladecoder-adventure-engineClassic point and click adventure game engine and editor項目地址: https://gitcode.com/gh_mirrors/bl/bladecoder-adventure-engineBladecoder Adventure Engine 是一套經(jīng)典的指點式Point Click冒險游戲引擎與可視化編輯器讓你幾乎不寫代碼就能做出可跨 Android、iOS 與桌面平臺發(fā)布的互動敘事游戲。而真正讓編輯器敢讓人隨便改的是背后兩套不起眼卻扎實的架構(gòu)Undo 撤銷系統(tǒng)與QA 自動校驗。本文面向新手帶你快速看懂這兩塊內(nèi)幕是如何煉成的 ? 先搞懂編輯器到底在改什么整個項目分為兩個子工程見 README.mdadventure-editor/圖形化編輯器負責搭建場景、角色、動詞與動作blade-engine/運行時引擎負責把這些數(shù)據(jù)跑成游戲。編輯器所有操作最終都落在同一個游戲模型上World世界→ Scene場景→ Actor角色/物品→ Verb動詞→ Action動作。Undo 系統(tǒng)與 QA 系統(tǒng)本質(zhì)上都是圍繞這個模型做的保護罩。 Undo 系統(tǒng)每次修改都留了后悔藥極簡骨架一個接口 一個棧Undo 系統(tǒng)的核心只有兩個類代碼極短但思路經(jīng)典UndoOp.java只有undo()一個方法的接口任何可撤銷操作都實現(xiàn)它UndoStack.java基于ArrayDeque的棧add()入棧、undo()出棧執(zhí)行并在日志里打印UNDO: ...方便排查。這就是典型的命令模式先把怎么撤回打包成一個對象再統(tǒng)一交給棧管理。19 種撤銷操作與模型改動一一對應(yīng)在 undo 目錄 下每個可撤銷操作都有獨立類可按用途分成三組分組操作類場景舉例 創(chuàng)建類UndoCreateScene/UndoCreateActor/UndoCreateSound新建場景、角色、音效? 刪除類UndoDeleteScene/UndoDeleteActor/UndoDeleteVerb/UndoDeleteDialog/UndoDeleteOption/UndoDeleteAction/UndoDeleteAnimation/UndoDeleteSound刪除模型元素時恢復(fù)原狀?? 編輯類UndoPosition/UndoRefPosition/UndoScale/UndoRotation/UndoDepthVector/UndoBboxPointPos/UndoEditActor/UndoEditScene拖動位置、縮放、旋轉(zhuǎn)、改屬性以 UndoScale.java 為例構(gòu)造時記下角色的舊縮放值undo()時調(diào)a.setScale(...)還原并調(diào)用setModified()標記項目已修改。一個類只干一件事擴展新操作時互不干擾。撤銷棧如何接入編輯器 UI撤銷棧由項目對象統(tǒng)一持有Project.java 中聲明undoStack并對外提供getUndoStack()各 UI 面板在每次模型改動后立刻入棧例如 SceneList.java、ActionList.java、ActorList.java 等重新加載項目時調(diào)用undoStack.clear()避免跨項目撤銷的詭異行為。? QA 自動校驗給游戲模型做一次體檢訪問者模式ModelWalker 遍歷整個世界ModelWalker.java 是 QA 的巡線員。它內(nèi)部維護 8 種訪問者列表——SceneVisitor、ActorVisitor、VerbVisitor、ActionVisitor、DialogVisitor、DialogOptionVisitor、StartVisitor、EndVisitor然后按固定路徑把整個世界走一遍開始回調(diào) → 逐場景 → 逐角色 → 逐動詞 → 逐動作 → 逐對話 → 逐選項 → 結(jié)束回調(diào)每條檢查規(guī)則只需實現(xiàn)它關(guān)心的訪問者接口遍歷邏輯一行都不用動——這就是訪問者模式的威力。四條內(nèi)置檢查規(guī)則QA.java 里注冊了 4 條規(guī)則全部位于 qa/rules 目錄規(guī)則類檢查什么Stats.java統(tǒng)計項目規(guī)模如場景數(shù)量輸出概覽CheckInteractionVerbs.java可交互角色必須有l(wèi)ookat且至少要有pickup或talkto物品欄角色應(yīng)有use動詞精靈角色至少要有一個動畫CheckDesc.java檢查角色描述等文本內(nèi)容是否完整CheckCutmodeEnd.java動詞如果開啟了 cutmode結(jié)束前必須關(guān)掉否則游戲會卡死在過場這些規(guī)則抓的正是玩家最容易碰上的體驗問題。比如移動端幫助畫面引擎自帶模板里演示的 examine / action / inventory 交互如果一個角色漏配了lookatCheckInteractionVerbs會直接在日志里報出場景.角色的 ID新手定位問題不再靠逐幀試。一條命令跑完所有檢查QA 通過 EditorCommandExecutor.java 暴露為編輯器控制臺命令qa()方法取出當前項目的 World 交給QA執(zhí)行。同文件里還附帶了checkI18N檢查多語言缺失鍵、printUnusedSounds找出未使用的音效等同類體檢命令構(gòu)成編輯器內(nèi)置的輕量質(zhì)量門禁。 新手可以借鑒的三個設(shè)計點一個操作一個類UndoOp 19 個操作類新增功能時零耦合測試也簡單遍歷與規(guī)則分離ModelWalker 負責去哪Visitor 負責看什么加檢查規(guī)則不用碰遍歷代碼質(zhì)量檢查前置到編輯器把動詞缺失cutmode 沒還原這類錯誤在制作階段就暴露出來而不是等玩家上線后才崩潰。寫在最后Bladecoder Adventure Engine 的 Undo 系統(tǒng)與 QA 自動校驗并不炫技卻把命令模式 訪問者模式這兩個經(jīng)典設(shè)計講得明明白白撤銷棧讓編輯零風(fēng)險模型巡檢驗證讓錯誤早發(fā)現(xiàn)。如果你想深入源碼從 undo 目錄 與 qa 目錄 這兩個小模塊入手一兩個小時就能讀透 【免費下載鏈接】bladecoder-adventure-engineClassic point and click adventure game engine and editor項目地址: https://gitcode.com/gh_mirrors/bl/bladecoder-adventure-engine創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考