flappy bird的实现原理和笔者的一点改进
2014-03-06 10:08
274 查看
先声明一下,本人写的程序绝不是以盈利为目的的,图片和素材来自于网上,如有冒犯,请原作者谅解!
最近flapp bird游戏非常之火,一天创下5万美元的收入,真是不可思议。所以笔者萌生了自己写一下这个游戏的念头,搞清楚里边的实现原理。接下来就讲一下笔者的一点拙见。
先说一下实现原理,其实很简单,小鸟在水平位置是不动的,是柱子不停的往屏幕的左边移动,由高中所学的相对运动知识,就感觉小鸟在往前飞一样。小鸟在竖直方向做的是竖直上抛运动,可以给小鸟初速度和水平加速度,利用公式得到每次小鸟的运动路程,利用小鸟的初始坐标减去s就可以得到小鸟的实时坐标,实现小鸟的上下不停的运动,就感觉小鸟在飞一样。小鸟不停煽动翅膀是通过准备三张图片,启动一个线程drawThread通过不断的按顺序画这三张图片,我的程序里边是让线程Thread.sleep(1),小鸟的上下移动,柱子的左移,得分的实时记录都是通过drawThread和继承surfaView类实现的。接下来要将的实现本游戏的关键,在画这些图片的时候不能继承View类,而一定要继承SurfaceView,继承关系如下所示
这是因为用View会阻塞主线程,造成画面卡顿现象,而SurfaceView就没有这样的问题,相关知识读者可以到网上搜索相关的知识,肯定会有比较深入的了解。小鸟、柱子、和草地三个类的共同方法有steep()和paint()两个方法,分别实现移动和画出自己的图片。而小鸟还有另外自己的方法就是hit()和pass(),分别表示碰到柱子、地面和传过柱子。这样可以完美的实现游戏画面,嘻嘻…记录用户的历史最高分是通过sharedpreferences实现的,相信大家也都知道。
游戏界面如下:
笔者的一点优化,1、因为有的玩家会感觉游戏有点难,可以设置不同的难度,以满足更多玩家的需求。2、通过吃某些随机出现的宝物,会使小鸟变成无敌状态。3、通过检测小鸟通过管道的位置,如果是很贴近管道通过的可以给个奖励的音乐,给个惊险得分的奖励。4、通过制定数量的管道时会变换不同的背景音乐,以提高玩家玩游戏的激情。
最近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、通过制定数量的管道时会变换不同的背景音乐,以提高玩家玩游戏的激情。
相关文章推荐
- C# 2.0 中Iterators的改进与实现原理浅析
- Java原子类AtomicInteger实现原理的一点总结
- iScroll-5拉动刷新(pull-to-refresh)功能实现与iScroll-4上拉刷新的一点改进
- 每天一点积累(一)--hashmap底层实现原理
- jdk7中hashmap实现原理和jdk8中hashmap的改进方法总结
- 战线长一点的飞秋实现原理
- C# 2.0 中Iterators的改进与实现原理浅析
- Android视频播放器屏幕左侧边随手指上下滑动亮度调节变暗变亮原理实现(2):后续改进
- C# 2.0 中Iterators的改进与实现原理浅析
- 关于session实现原理和运行机制的一点理解
- LBP小结:LBP及改进版本的原理和opencv实现源代码
- iScroll-5拉动刷新功能实现与iScroll-4上拉刷新的一点改进
- std::vector实现原理及特定场景下的改进
- 对ThreadLocal实现原理的一点思考
- Ogre的Singleton实现-模版实现,便于重用-(详细分析)以及笔者的改进
- C# 2.0 中Iterators的改进与实现原理浅析
- 探索HashMap实现原理及其在jdk8数据结构的改进
- 关于字符串比较的一点讨论---strcmp与memcmp的效率及实现原理
- 深度学习基础模型算法原理及编程实现--04.改进神经网络的方法
- JVM原子操作的实现与一点改进想法