改进飞碟游戏
游戏内容要求
- 按 adapter模式 设计图修改飞碟游戏
- 使它同时支持物理运动与运动学(变换)运动
代码基础
因为上周的作业实现结果并不理想,所以,此次改进不准备在原有代码上完成,使用了师兄的代码,在其基础上完成本次作业。
具体实验过程
基本思路(自顶向下分析)
此次实验的目的是实现Adapter模式
,使得运动行为可以有两个接口,分别由运动学和物理运动完成飞碟飞行的功能。
所以,从模块设计上来看,首先应该要在SSActionManager
中实现普通游戏对象的Update
和刚体游戏对象的FixedUpdate
的区分,他们使用不同的场景更新函数,使用一个bool型标记flag
来区分。
其次,需要从SSActionManager类
派生出一个改进的游戏动作管理类ModifiedActionManager类
,用于实现对物理运动的游戏对象的运动动作管理。
因为要使用Adapter模式
,所以需要实现一个interface
接口ActionManagerAdapter
来被CCActionManager类
(运动学运动行为管理)和ModifiedActionManager类
(物理运动学行为管理)分别实现,这样场记就可以通过这个接口方便的选择调用哪一个完成动作管理。具体实现在于,在CCActionManager类
和ModifiedActionManager类
override的Start函数
中分别使得base.flag=true
和base.flag=false
。
在具体的行为类CCFlyAction类
中,因为游戏对象可能拥有刚体性质,所以需要对gameObject.GetComponent<Rigidbody>()
进行判断,若该值不为空,则表明具有刚体性质,那么需要设置刚体的一些属性,比如velocity
速度值进行设置,而且,刚体在游戏暂停时,也需要保持当前状态不可以动,所以需要有一个函数来完成对velocity属性和useGravity属性
的设置,令速度归零且不受重力影响(静止)。这个方法需要最终被ModifiedActionManager类
通过对游戏状态的判断决定是否调用。
最后是DiskFactory类
,它需要决定是否为游戏对象添加刚体性质,根据传入的创造实例的需求确定。