首先是MVC 架构 降低耦合度 分为三层
Model层:存取数据,数据相关操作
View层:处理视图,交互部分
Control层:控制游戏逻辑,通过Control来控制Model与View层
Model与View不直接交互 而是通过Control来交互 (不知道是不是像中介者模式) 降低耦合度
几乎UI的动画都在View层里面制作的 涉及到数据的修改 就放到Model里面去
例如清空记录 数据的更新等
游戏有限状态机
初步理解:就是设计游戏中的几个状态,通过条件控制游戏在这几个状态中跳转,并且只能处在一个状态
菜单状态 游戏状态 暂停状态 游戏结束状态
FSM有限状态机:
四个部分
1.Transition 枚举类型 条件 即发生状态装换的条件
2.StateID 枚举类型 状态 即所有的状态
3.FSMState 抽象类
数据成员: Dictionary<Transition, StateID> 用字典表示当前可以用某个条件转换到某个状态
StateID stateID 当前的状态
方法成员: AddTransition(Transition trans, StateID id) 将当前条件 状态 添加到字典
DeleteTransition(Transition trans) 将当前条件 状态 从字典删除
StateID GetOutputState(Transition trans) 从给定的条件找到对应的状态
virtual void DoBeforeEntering() 进入当前状态时调用
virtual void DoBeforeLeaving() 离开当前状态时调用
4.FSMSystem 实体类 管理所有的状态
数据成员:List<FSMState> states; 所有的状态
StateID currentStateID; 当前的状态 这个可以不需要
FSMState currentState; 当前FSMState
方法成员: FSMSystem() 构造函数
AddState(FSMState s) 添加状态
DeleteState(StateID id) 删除状态
PerformTransition(Transition trans) 提供一个转变条件 到转变状态
游戏实现的原理:
用一个Transform数组存储地图
当Shape每下落一个单位 就检查当前位置是否可用
不可用 回退一个单位 将当前的Shape停止运动
将Shape装入Transform数组中
检查是否有行可以消除
可以消除 销毁当前行的物体 Map中代表当前行的置空 上面的所有行向下移动一个单位 继续检查当前行
不可以销毁 继续向上检查
其他:
对于一个图片怎么设置他在Scene中的单位呢 因为图片是以像素来计算的,Pixels Per Unit的值为50表示在这个场景中50像素代表一米
在设计基本shape的时候用一个物体来保存旋转点。
一个父物体 下面有几个子物体 如果遍历父物体的Transform 就可以得到父子物体的Transform
扩展方法
Model层:存取数据,数据相关操作
View层:处理视图,交互部分
Control层:控制游戏逻辑,通过Control来控制Model与View层
Model与View不直接交互 而是通过Control来交互 (不知道是不是像中介者模式) 降低耦合度
几乎UI的动画都在View层里面制作的 涉及到数据的修改 就放到Model里面去
例如清空记录 数据的更新等
游戏有限状态机
初步理解:就是设计游戏中的几个状态,通过条件控制游戏在这几个状态中跳转,并且只能处在一个状态
菜单状态 游戏状态 暂停状态 游戏结束状态
FSM有限状态机:
四个部分
1.Transition 枚举类型 条件 即发生状态装换的条件
2.StateID 枚举类型 状态 即所有的状态
3.FSMState 抽象类
数据成员: Dictionary<Transition, StateID> 用字典表示当前可以用某个条件转换到某个状态
StateID stateID 当前的状态
方法成员: AddTransition(Transition trans, StateID id) 将当前条件 状态 添加到字典
DeleteTransition(Transition trans) 将当前条件 状态 从字典删除
StateID GetOutputState(Transition trans) 从给定的条件找到对应的状态
virtual void DoBeforeEntering() 进入当前状态时调用
virtual void DoBeforeLeaving() 离开当前状态时调用
4.FSMSystem 实体类 管理所有的状态
数据成员:List<FSMState> states; 所有的状态
StateID currentStateID; 当前的状态 这个可以不需要
FSMState currentState; 当前FSMState
方法成员: FSMSystem() 构造函数
AddState(FSMState s) 添加状态
DeleteState(StateID id) 删除状态
PerformTransition(Transition trans) 提供一个转变条件 到转变状态
使用方法: 首先构造你需要的状态 并且设置当前状态和(键值对(装换条件和状态))
构造有限状态机 添加所有的状态
设置默认状态 将FSMSystem里面的设置迷人状态的代码去除
给每个状态添加ID
通过 状态---->状态
每个State要引用FSMSystem
游戏实现的原理:
用一个Transform数组存储地图
当Shape每下落一个单位 就检查当前位置是否可用
不可用 回退一个单位 将当前的Shape停止运动
将Shape装入Transform数组中
检查是否有行可以消除
可以消除 销毁当前行的物体 Map中代表当前行的置空 上面的所有行向下移动一个单位 继续检查当前行
不可以销毁 继续向上检查
其他:
对于一个图片怎么设置他在Scene中的单位呢 因为图片是以像素来计算的,Pixels Per Unit的值为50表示在这个场景中50像素代表一米
在设计基本shape的时候用一个物体来保存旋转点。
一个父物体 下面有几个子物体 如果遍历父物体的Transform 就可以得到父子物体的Transform
扩展方法