在之前的设计中有提到,游戏过程就是一个有限状态机。而之前状态机我们已经实现,我们在此之上实现之前提到的
驱动级任务及临时任务的概念。
我们可以认为 地图及场景切换 是我们的驱动级任务。而战斗、弹出窗口、小游戏等是游戏中的临时任务。
对于我们的游戏引擎,必须能够方便的添加新的场景、随时启动子任务。而这一切在基于我们的引擎开发的时候不应该再要考虑架构上的资源管理、内存管理等问题。
下面是我们的类图:
GDE_Task是我们的所有任务的基类,具有属性 EngineInstance 用于保存游戏引擎实例,RootUIElement用于保存该任务的根绘图元素(用于界面绘制)。
派生类StateMachine(状态机) 具有方法 设置根元素 SetRootUIElement 和 切换下一个状态 RunNextStatus
派生类SubTask(子任务) 具有方法 设置根元素 SetRootUIElement 和 子任务结束 SubTaskEnd
然后下面我们给出三个用于测试的类,都派生ITask接口,必须实现 Run方法作为具体任务的逻辑入口。
编辑界面 TestStatus1 为 主界面,有三个按钮“新游戏”“读取进度”“退出”。
编辑界面 TestStatus2 为 一个场景,载入一个背景图片。
编辑界面 SubTaskTest 为一个战斗场景,具有一个提示栏和一个按钮,点击按钮则认为是该战斗结束。
具体逻辑为 ,在主界面点新游戏 ,切换到场景1,然后立即打开战斗,当战斗退出时,又回到场景1
下面为测试结果截图:
点击新游戏进入
点击结束战斗,回到场景
下面是任务调度核心部分代码:
下面是三个测试界面的启动代码:
ITask接口部分代码