flappy bird的实现原理和笔者的一点改进
来源:互联网 发布:淘宝卖家文艺感谢 编辑:程序博客网 时间:2024/05/14 12:22
先声明一下,本人写的程序绝不是以盈利为目的的,图片和素材来自于网上,如有冒犯,请原作者谅解!
最近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、通过制定数量的管道时会变换不同的背景音乐,以提高玩家玩游戏的激情。
- flappy bird的实现原理和笔者的一点改进
- Flappy bird 小游戏的实现
- 用html5实现的flappy-bird
- 基于CC3200的Flappy Bird
- pygame 写的 flappy bird
- cocos2d-x 《Flappy Bird 》一、滚动背景的实现
- HTML5逆天:65行JS代码实现的Flappy Bird
- 使用cocos2d-x实现一款类似《Flappy Bird》的游戏
- 关于最近很火的Flappy Bird
- flappy bird背后隐含的营销法则
- flappy bird 的盈利模式 谷歌是幕后赢家
- Flappy bird-飞翔的小鸟穿越世界
- 基于DQN的Flappy Bird实验
- 转一大一孩子的c++实现的flappy bird(应用sdl库)
- HTML5+JavaScript实现Flappy Bird
- Flappy Bird C语言实现
- JavaScript 实现flappy bird小游戏
- 用c++和opencv写的电脑版flappy bird过关程序
- Android触屏事件分发机制
- spring 文件上传
- vs2012在win7安装失败
- ns中定时器句柄的定义
- iBeacon 技术研究相关资料
- flappy bird的实现原理和笔者的一点改进
- vmware下的虚拟机扩充硬盘
- Github for Windows使用介绍
- Android achartengine timerchart曲线动态左移(横轴为当前时间)
- JAVA中的值传递
- RMAN: CONFIGURE BACKUP OPTIMIZATION ON
- 操作系统学习--存储管理
- 结合正则表达式验证数学公式(含变量,js版)
- 第五章 dubbo之zookeeper