1、构建地图;为了简单点,就没有采用数组的方法来构建地图了,而是通过paint画笔遍历存储在各个列表List<>里的物体(物体添加到集合里就定义好位置了)来达到绘制场景的目的。
2、碰撞检测;主要包括人与障碍物、人与敌人、敌人与障碍物之间的判断,可以通过获取背景中的物体的类型、尺寸(图片大小)、状态来进行判断;值的注意的是,当Mario处于两块砖块之间时,很难跳上去;解决方法是将判断距离稍微减小(小于Mario图片的格式),降低判断的灵敏度。此外,我这里还有一个bug没有修复,就是当Mario跳起来,然后以45°角度向砖块移动,会直接穿过砖块,再栗子怪面前以45°跳到栗子怪上面也被认为是踩到栗子怪,这些应该还是碰撞检测灵敏度的问题。
3、移动太快;通过调用线程的sleep()方法可以让敌人移动速度,降旗速度,以及Mario的速度随自己的想法调整。栗子怪被踩时切换成被踩扁的照片没有显示也是因为速度太快引起的。一般来说让所以线程的睡眠时间一致就可以了
4、地图重绘;由于Mario的动作引起的场景变化,都要在Mario死亡一次后,重新回到原来的位置和状态。这个问题可以通过利用一个列表List<>把消灭的敌人和障碍存储起来,Mario死亡后调用paint遍历列表即可重绘出来,记得要改变状态。
5、Mario死亡后状态;在调试过程中,发现一个bug,就是当Mario从上面掉下来碰到食人花的时候死亡,但是重新一条生命的时候,Mario一出现在界面中,就以之前碰到食人花的状态继续下落,然后掉到地下死亡,而不是以站立的状态出现在预先设定的复活点处。解决方法就是对Mario的各个属性都进行修改,更简单的就是让Mario复活在空中,就不会直接一复活就掉到地下。
6.最后就是子弹,嗯....这个目前还没开发好今天改了一些东西,然后就红了一大片么,出现了一个之前在创建静态类的时候的问题当时解决掉时候发现仅仅只是写路径的时候搞错了一个字母...还有在碰撞检测时一个小于号写错了直接导致我的马里奥踏空飞行.....等等这些问题花了我许多时间,所以以后大家如果遇到百思不得其解的问题,不妨看一看代码有没有打错。
最后希望这篇文章能对家有用。
Happy everyday!man!