开发日志记录时间:2010.4.29 Thuresday
目标:
1) 实现多人物,并且同类型共用一个数据。增加部分游戏场景物体,比如木桶之类。
2) 实现碰撞。
3) 人物在遭受打击时表现出应有的状态。
共用数据时,就需要在每个人物内部保留一份独特的数据,AnimData这个类里的属性(实际上就是一些数据)就不能够再是Static的了。更改为实例字段。
思考:
另外发现数据源除了被填充之外,还在循环里被调用,那么这些数据在整个游戏过程中就会始终存在,形成数据冗余,是否能够避免呢?
这个类里面有些数据是需要填充到Player的属性里的,有些在游戏的过程中实时查询调用,比如互斥这个数据是需要实时查询的。
整理:
让我们来看看一个游戏人物需要哪些数据来驱动自身的运转:
(1) 需要一个xml文件来保存所有的图片名称,以便在初始化的时候,将这些图片保存到一个List<WriteableBitmap>里面。但同时发现方法里把图片在存储的文件夹信息是硬编码在方法里面的。这是一个隐性的Bug。需要改进。
(2) 另外一个重要的数据来源就是AnimData这个类。
double[] playerInitData | 动力学属性表 |
初始位置,阻力加速度,动力加速度,物体质量,最大速度,重力 | |
string[] StAnimation | 动(画)作表 |
动画名称,动画序列,动画执行间隔,动画X速度,动画Y速度,可立刻恢复动画 | |
string[] StAction | 键盘操作列表 |
这里的左右设置需要和Animate()方法里的Facing的判断保持一致 | |
int[][] mutex | 互斥动作列表 |
用数组的索引代替了动画,所以这个数组要和double[] playerInitData保持一致 | |
int[][] InterludeMatch | 过渡动作指导表 |
在这里同样用索引来表示动作,来表示动画和动画之间是否需要过渡以及需要哪一个过渡 | |
List<int[]> AmendCoordinate | 坐标指导表 |
存储每一个动作序列中每一帧图片的纠正坐标(使动作和上一个动作的脚底保持一致),防守范围框的坐标和长宽,攻击范围框的坐标和长宽。这个表中的数据要和动作表里的动作序列一一对应 |
改进:
保持代码的一致性是很重要的。有很多类似 ××方法(A _a,PlayerTemplate _data),决定把所有类似的方法中的PlayerTemplate参数放在后面。
遇到问题:
在创建同类型的多个游戏人物时,遇到了一个问题,同类型的游戏人物是基于同一套游戏逻辑的,也就是说他们都基于同一个类的同一套方法,为了方便,把这些方法都写成了静态方法,这本来没有什么大问题;要紧的是为了方便,使用这些方法的时候又加了静态属性。
现在由一个人物变成了多个人物,共用方法的时候也共用了数据属性,而这些属性又是静态的,一动全动,于是问题出现了,虫子出来了。
教训:
要考虑全面,如果想要共用方法,用了静态方法,注意不要使用静态属性。