提示
本文的设想性质比较大,只是探讨一种设计思路。完全理论阶段,不可行就当是闹了个笑话O(∩_∩)O哈哈~但很符合我瞎搞的气质。
概述
一些游戏元素,其实是拥有多个状态的。比如一个宝箱,有打开和关闭两个状态。那么只需要设定两个状态的图片,就可以了。建筑物、生物、角色等等都可以用类似的结构存储多种状态,并进行切换。
状态可以是静帧,也可以是一段循环帧动画。
基于SpriteSheets或序列帧的帧动画搞的就是基于图片的状态划分这一套。但是你需要用AnimationPlayer
这样的东西去创建多个状态的动画,再在脚本中进行切换。
通过从结构上就设计和管理游戏元素的多状态。我们可以更少的依赖AnimationPlayer
等对游戏元素状态的划分,我们可以更直观和简单的切换元素的状态和外形。而且同样可以是基于多张图片的,也可以是基于精灵表的。这对新手使用更是没什么难度,而且很直观。
类型体系设计
简单状态用图片,复杂状态用图片序列。
设计具体的元素
StateBasedGameElement
只是一个抽象的基于状态的游戏元素(以下简称SBGE),你可以基于其扩展具体的元素类型,比如建筑物、植物、动物、角色等等
# 创建一个具体的盒子元素
class Box extends StateBasedGameElement://...pass
- 或者可以基于一个
Node2D
来专门创建SBGE。
状态切换的实现
对状态和序列帧的绘制使用CanvasItem
绘图函数实现。
状态分析与面向游戏元素状态设计
通过从一开始就强调游戏元素的“状态”,游戏元素的设计就变成了状态分析的过程,绘制素材有了凭据。
而使用StateBasedGameElement
的过程就是动态创建和管理游戏元素的状态,赋值各个状态的静帧或序列帧,然后在脚本中切换状态。
游戏元素的状态在节点内部切换,外部代码不再需要存储。所有状态并列在一个列表中,只通过索引进行切换。
将方向状态单独列出
可以划分为两方向、四方向、八方向、十六方向等。每个方向下又可以对应其他状态。所以状态从一个一维列表,变成了二维表。
还可以设定一个参数表示游戏元素目前的朝向,比如angle
,通过-360°
到360°
范围的角度来定义方向,根据角度自动判定和切换对应朝向的图片。
总结
纯设想和理论状态,有待实践验证。