20170818 - 今日技能封装 - A
1 真正的理解飞机大战中运用的面向对象的编程思想。
大大清晰化思路,不再卡
2 子弹射击敌人是子弹的行为,需不需要返回值?为什么返回的是有无射中,而不是直接判断后缩容?
需要,有没有射到——boolean,在类中定义方法时传入一个敌机对象(无需在类中传入)
直接缩容还需要传入数组,一个方法最好只处理一个事件。
3 由于life及doublefire属性被私有化,所以加火力必须在英雄机内部写。
4 通过清晰化思路快速找到错误,迅速解决问题
调试时发现没有撞击成功,一层一层看,首先发现下标写错,再调试还是不行,于是判断应该是
shootBy函数出现了问题,检查发现是y轴坐标判断出现了问题,遂修正,调试结果正常。
5 面向对象编程思想。
能用父类(接口类)判断,不要用子类判断
判断飞行物,调用飞行物的方法,如果是父类的,则调用父类,如果是子类重写的,则会调用子类重写后的方法,再灵活一些,可以判断类型并强转,再调用子类自身特有的方法。
能传入(接收)对象的,不要传入属性。
“一但过于具体,扩展性就差”
if(f instanceof Enemy){
Enemy e = (Enemy)f;
score += e.getScore();
//面向对象,扩展性好——如果e是不同类型的对象,就会分别调用给的getScore方法
//对比直接将getSocre写死在Enemy中。
}
6 敌人为什么会消失?
敌人显示是因为g画出数组中每个对象。
从数组中删除。
利用交换算法将被撞对象与最后一位交换,缩容敌机数组,
7 程序的状态一般存储于?
常量中,用定时器循环检测。
需掌握的
按出现顺序
①定时器在该类游戏设计中的用法
用于执行需要循环的事件,如画图,检测状态,判断游戏内部各元素状态并做相应处理。(10ms就能走完一个流程是前提,如果走不完就会卡顿)
②理解paint()函数是如何实现游戏的动态效果
通过设置极小的时差,循环执行,实现近动态的效果。

浙公网安备 33010602011771号