今天尝试将 2D RPG 角色移动模组根据规格画出 Flowchart 和 State Diagram
首先我们先尝试使用 Flowchart ,假设从最开始的需求,只有跳跃而已(下图一),
图一
到最後除了跳跃,还要有匍匐、前进、後退等,随着功能增加,添加了许多 flag 储存不同状态,以及为了使角色功能正常运作的防呆检查,最後会像是非常惊人的图(下图二),
图二
不要问我花多久时间画出来的 QwQ,怕~(说不定还有画错?!等待广大网友们帮我除错XDD)
(更新:发现我好像有哪里漏思考画错,但没保留原档,不愿意面对,以後有时间再回去重画吧)
假设今天有人很认真开发、也很注意每个 if, else 的小细节,也细心思考过每个状态下的防卫(Guard)跟防呆(Fallback),而且还愿意多花自己的时间补齐文件(加班?!),最後画出一张详细的流程图在上方...。
我感到敬佩跟尊重,但不晓得一般人,不管工程师或 PM ,到底愿意花多少心力细看上图二。
假设真的遇到错误、bug,不管有没有这张图,应该也会迷失在茫茫 bug 海吧?
而且图中,显现太多逻辑判断的细节,其实不需要为外人所知,这些逻辑判断,也只不过是为了达成规格书要求所产生的。
假设我们今天尝试采取比较高抽象层次的观点来着手,还记得昨天提到的
我们先从一个实体对象(entity, object)的观点出发,假设我们今天实体对象就是玩家操纵的角色,
我们的商业需求,目前有跳跃、俯卧、前後移动,3种主要的大动作,我们可以来细细思考,我们可能需要怎样的状态及事件。
先想想,玩家一开始抵达我们的系统会是什麽样子,应该可以有一个静止的站姿吧(初始状态)?
接着先对应到跳跃(Jump)
我们可能有跳跃前、跳跃後...,跳跃是个动作、动词,所以我们姑且先将他视为一种事件,那这个事件的前後应该是什麽状态呢?
跳跃依照规格「可能」只能从静止时开始,所以跳跃前的状态应该为静止站姿,进行跳跃时,就要转换到跳跃中的状态,跳跃结束时,应该会回到地面静止站姿的状态,所以可能应该要有个降落的事件,让玩家回去。
如果对上述的整理已经产生不肯定、疑惑时,这就是一个去跟 PM 厘清规格很好的时机,不用等到开发下去才再回去改。
再来我们看移动
移动同样是个动词、动作,我们应该可以视为一种事件,那移动这个事件应该从什麽状态开始什麽结束呢?
常理(或照规格)应该是从静止开始吧?所以站姿静止状态经过一个开始移动的事件後,应该要转移到一个状态,我们姑且称这个状态为站姿移动中,而这个移动中,应该要有个停止,才有办法回到静止的状态,所以我们也应该实作一个停止移动的事件(即放开 ⇦、⇨ )。
一样,如果对上述的整理已经产生不肯定、疑惑时,这就是一个去跟 PM 厘清规格很好的时机。
最後来看俯卧与匍匐前进
如何匍匐前进、後退?
假设从站立到卧倒,我们可能要一个卧倒的动作及俯卧中的状态,以及对应回去的起身的动作。
而同上的站姿移动,卧倒中要移动,可能也必须要仰赖开始移动的事件来到匍匐移动中,而停止移动,则可返回静止卧倒状态。
如此我们便完成了一张状态图
假设今天不管这张图是从工程师这边画出来或从 PM 那边拿到,是不是比较能轻易理解?
接着明天会将 Flowchart 、 State Diagram 做一个比较
<<: Layout, Render 与 View Helper
在上一篇文章中提到,我们可以将不同类别当中的共同属性或方法,提取出来放在 parent 类别当中,然...
现在时代线上金流其实已经与各位的生活密不可分, 小吃、直播、实体商店、大小型电商等等族繁不及备载, ...
关於 Scratch 3 教学原文参考:关於 Scratch 3 Scratch 是由美国麻省理工学...
在串接API之前我们还有一个重要的设定要做,我们必须先汇出证交所网站的SSL证书,并加入到JAVA的...
分享一些我很喜欢的学习资源 有看到新的好资源会陆续更新 Computer Science 计算机概论...