- 物理引擎blockE
- X索引头
- Y索引头
- 方向结构enum
- 探测某个方向下一个方块。
- 探测某个方向的紧邻的方块。
- 添加方块碰撞回调。(当两个方块的碰撞区域处于同一个节点)
- 添加碰撞方块
- 删除碰撞方块
- 改变碰撞方块的激活状态
- 移动方块
- 添加回调(内部方法)
- 添加添加碰撞方块事件回调
- 添加删除碰撞方块事件回调
- 添加改变激活状态事件回调
- 添加移动方块事件回调
- 从全部事件中删除某个回调。
- 物理数据结构blockData
- X
- Y
- 上邻接块
- 下邻接块
- 左邻接块
- 右邻接块
- 显示数据结构(unity专用)
- 2D向量
- 贴图对象
- 贴图坐标
- 上邻接块
- 下邻接块
- 左邻接块
- 右邻接块
- Unity显示组件(通过管理器来实现显示和物理的统一,通过事件回调解除接口耦合)
- 添加方块
- 删除方块
- 激活状态改变
- 添加激活改变事件回调。
- 添加删除方块事件回调。
- 添加添加方块事件回调。
- 删除事件回调
- 平滑移动
- 闪现移动
- 移动回调(返回一个移动方式和位置)
- UnityBlockData
- Unity身份识别组件
- 显示组件
- 物理组件
- UnityBlock
- 属性:
- UnityBlockData
- 属性:
-
-
- Block辅助检测器件
- 添加方块(静态方法)
- 添加显示组件
- 添加物理组件
- 激活全部组件
- 禁用全部组件
- 移动方块(填入位置)
- 移动放款(填入向量)
- 闪现方块(填入位置)
- 闪现方块(填入向量)
- 添加各种事件回调
- 删除事件回调
-
- Block插件(block辅助检测器件):
BlockSearch2D区块搜索器所依赖的接口UP,Down,Left,Right搜索
-
-
向某个方向区块搜索注:抽象插件不是越多越好,要平衡代码量和复用量,有时候复用量多不一定代码少,比如一个接口里面就一句话的时候。尤其是我们不能使用抽象类,因为抽象类只能放置一个父类,而我们的插件允许一个类插入多个插件。
- BlockDetector2D边缘检测器(用来动态效果显示的,例如让所有的云方块融为一体)
-
- 所依赖的抽象API
- 向某方向区块搜索()
- 抽象数据:dynamic类型的block。
- 所依赖的抽象API
- 左上角边缘检测(起点,方块类型数组(UnityBlockData)(包含在整体的数组),处理回调函数)
-
-
-
-
- 右下加边缘检测
- 左下角边缘检测
- 右上角边缘检测
- 阶梯边缘检测
- 上边缘检测
- 下边缘检测
- 添加检测回调函数(用于检测到之后的后续处理,参数是调用者对象(用范型,但是限制必须包含接口API))
- Dfs(注:自动调用并按照顺序调用全部的检测器回调函数。)
- 注:检测器有优先级,边角检测的优先级高于上下边缘检测,所以边角检测的回调调用后会覆盖掉部分上下边缘的显示效果。回调的返回值是一个、
- 注:因为blockDetector插件需要知道周围物体的信息所以与UnityBlockData产生了很大的偶合,所以我才考虑模块内的流程化编程。同时同样的检测算法同时可以适用于物理组件和显示组件这就导致我们不能与其中任何一个耦合或者与两者都耦合显然第二种情况是我们不像看到的。所以我们的插件使用了接口。
-
设计原则:主要部件相互分离,但是主部件的插件将依赖于主要部件。当然不排除有万能功能插件的设计。万能功能插件使用函数式编程的方式,并且使用初始化操作,来实时的填入处理函数,也就是说万能功能插件就是一个流程框定器而已,仅仅框定流程,当然模板模式也可以,但是那样依赖于抽象,这样就全部不依赖了。当然关键部分依赖于接口,但是接口可以避免一个对象不能继承多个抽象类的问题(你不能保证一个类只用一个插件吧!)