先声明一下,本人写的程序绝不是以盈利为目的的,图片和素材来自于网上,如有冒犯,请原作者谅解!
最近flapp bird游戏非常之火,一天创下5万美元的收入,真是不可思议。所以笔者萌生了自己写一下这个游戏的念头,搞清楚里边的实现原理。接下来就讲一下笔者的一点拙见。
先说一下实现原理,其实很简单,小鸟在水平位置是不动的,是柱子不停的往屏幕的左边移动,由高中所学的相对运动知识,就感觉小鸟在往前飞一样。小鸟在竖直方向做的是竖直上抛运动,可以给小鸟初速度和水平加速度,利用公式得到每次小鸟的运动路程,利用小鸟的初始坐标减去s就可以得到小鸟的实时坐标,实现小鸟的上下不停的运动,就感觉小鸟在飞一样。小鸟不停煽动翅膀是通过准备三张图片,启动一个线程drawThread通过不断的按顺序画这三张图片,我的程序里边是让线程Thread.sleep(1),小鸟的上下移动,柱子的左移,得分的实时记录都是通过drawThread和继承surfaView类实现的。接下来要将的实现本游戏的关键,在画这些图片的时候不能继承View类,而一定要继承SurfaceView,继承关系如下所示
public class WorldView extends SurfaceView implements SurfaceHolder.Callback {
...
}
这是因为用View会阻塞主线程,造成画面卡顿现象,而SurfaceView就没有这样的问题,相关知识读者可以到网上搜索相关的知识,肯定会有比较深入的了解。小鸟、柱子、和草地三个类的共同方法有steep()和paint()两个方法,分别实现移动和画出自己的图片。而小鸟还有另外自己的方法就是hit()和pass(),分别表示碰到柱子、地面和传过柱子。这样可以完美的实现游戏画面,嘻嘻…记录用户的历史最高分是通过sharedpreferences实现的,相信大家也都知道。
游戏界面如下:
笔者的一点优化,1、因为有的玩家会感觉游戏有点难,可以设置不同的难度,以满足更多玩家的需求。2、通过吃某些随机出现的宝物,会使小鸟变成无敌状态。3、通过检测小鸟通过管道的位置,如果是很贴近管道通过的可以给个奖励的音乐,给个惊险得分的奖励。4、通过制定数量的管道时会变换不同的背景音乐,以提高玩家玩游戏的激情。