事实证明大家都可以花两三天去搞一个自己的flappybird!
鄙人不才,C++不精通,因此也就打消了用coco2dx的念头,以前曾经用过libgdx,所以,这次手痒就用libgdx来解决了
其实一个手机端的游戏大的框架都是挺简单的
1.loading,游戏,退出
2.游戏界面就是一个大舞台,舞台里是各种各样的演员,不论是动的还是不动的
3.构造好要满足需求的演员的摆放位置和进场出场时机
4.准备好游戏所需的素材
5.健壮的左右手,以及撸代码的毅力
下面就分析一下flappybird的实现思路:
1.loading界面,一个screen,加载资源,并且显示loading图片,完了就跳转
2.游戏界面中略微复杂一点点:
(1)鸟:一个actor,可以上下移动,可以挂掉(图片旋转90度,并停止的动作),可以撞水管(碰撞检测)
(2)水管:一个actor,可以向左移动,每次n个像素,分为上下两部分+中间的空隙,实际上就是一大条,可以上下移动,水管需要拉到足够长
(3)分数:最大那几个数字,用来计数,用1-10的图片,做成可以根据输入数字来显示的actor,实际上就是记分牌,位置固定
(4)背景:不动那部分用一个image,动的部分用两个image向左平移轮流显示
(5)gameover:gameover的图片和最后统计面板以及按钮,这个根据个人喜好做成一个actor还是用几个actor,按钮点击事件重新开始游戏
3.关于鸟如何一弹一弹的:
这个实际上很简单,libgdx自己带着box2d物理引擎,所以,只要创建一个box2d的world,并且设置重力场,在这个world中创建一个圆球,与你的鸟绑定
每次重绘界面的时候讲球的高度转换一下赋给你的鸟,很简单的自由落体就出来了。
想要向上弹怎么办呢?这个也简单,直接给它一个力是不足以让一个有质量的物体瞬间改变运动方向和速度的,但是还有另外一个东西,叫做冲量,box2d支持
直接给这个物体朝某个方向的一个冲量,对,每次点击屏幕的时候我们只要给它一个垂直向上的冲量就能够满足你的需求了,至于这个数值多少合适嘛,那就up to you了
4.碰撞检测:
这部分可能写起来代码就稍微恶心一点,我的思路有两个:
(1)是轮询所有未pass的水管,看看鸟是不是和它们有重叠的部分,这个是人人都能想到的比较原始的方法
(2)使用box2d,每次创建一个水管的时候在world中创建一个和水管左边缘对齐的挡板,然后让鸟所对应的那个圆球和挡板撞就行了,box2d自带碰撞检测的,但是撞了之后怎么处理就是细节问题了
其实呢,这个东西我已经基本写完了,源码传不传上来呢,看看群众需求吧,回复20以上则上传
还有,需要flappybird资源的,请看我置顶的blog,上面有资源获取教程,点击进入图片资源获取教程,想要略过那么繁杂的手段获取到资源的,还是看一下群众呼声哈,需求多的话我再传上来
终于抽出时间来上传代码了,上传到csdn资源上了,点击去下载作者共享的源码