1.写在前面的话:
一次无意中在csdn上找到一个资源《android高仿flappy bird源码》,下载下来运行一下,效果非常不错,再进去一看代码,乖乖,好东西啊,整个游戏的框架非常的nice,这其实是一个非常好的游戏框架,对于一般的游戏,我们都是可以直接使用噢。但是,唯一的遗憾是这位android高手,不知道为什么只有源码,没有好好的写一个博文详细的介绍一下自己的这个游戏。
2. flappy bird游戏效果:
3.flappy bird游戏的关键类:
1.游戏的一些工具类:
(1)FileManager类----此类主要是为了保存游戏的最高成绩
(2)SoundPlayer类----音乐播放类
(3)Constants类-------程序中的常量集合类,主要是处理一些不变的常量
(4)Config类-------------配置类,主要是程序中的一些可以配置的变量,这个非常重要,因为许多重要的配置参数,如游戏的渠道变量,都可以在这个类中配置。
2.游戏的基本元素的类:
flabby bird游戏的基本元素包括地板(Ground),小鸟(Bird),障碍物(Column)。他们都有一个基类(GameObject),下面详细介绍一下GameObject(后面会附源码):
对下游戏元素,首先是他的宽(obj_width),高(obj_height),显示位置(obj_x,obj_y,obj_mid_x,obj_mid_y),对于带有动画的元素,还有一个参数就是当前图片(currentFrame),初始化图片的方法(initBitmap()),释放资源方法(release()),显示自己的方法(drawSelf(Canvas canvas)),还有一个关键的动态步进改变的方法(step())。
3. 游戏的场景类-----BaseView
flabby bird游戏的场景包括加载场景(LoadingView)和主游戏场景(MainView),所有的场景都有场景基类(BaseView),下面详细介绍一下BaseView(后面会附源码):
对于游戏场景,第一个是游戏背景的比例缩放(scaleX,scaleY),这个主要是处理游戏背景。初始化图片的方法(initBitmap()),释放资源方法(release()),绘制场景的方法(drawSelf()),还有一个关键的线程(Thread)运行的方法(run())---此方法主要是线程执行动态操作。由于游戏场景类是继承自SurfaceView类,在surfaceCreated方法中,我们一般执行初始化和启动线程的操作,在surfaceDestroyed方法中,我们一般执行资源释放操作。
附1----GameObject类:
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
public abstract class GameObject {
protected int currentFrame;//当前动画帧
protected float obj_x;//对象左上角坐标
protected float obj_y;
protected float obj_mid_x;//对象中心横坐标
protected float obj_mid_y;//对象中心纵坐标
protected float obj_width;//对象宽度
protected float obj_height;//对象高度
protected Resources resources;
protected Paint paint;
public GameObject(Resources resources) {
this.resources = resources;
paint = new Paint();
}
//对象运动逻辑
public abstract void step();
//绘图方法
public abstract void drawSelf(Canvas canvas);
//初始化如片资源
public abstract void initBitmap();
//释放图片资源
public abstract void release();
public void setObjX(float x) {
this.obj_x = x;
}
public float getObjX() {
return this.obj_x;
}
public void setObjY(float y) {
this.obj_y = y;
}
public float getObjY() {
return this.obj_y;
}
public void setObjMidX(float x) {
this.obj_mid_x = x;
}
public float getObjMidX() {
return this.obj_mid_x;
}
public void setObjMidY(float y) {
this.obj_mid_y = y;
}
public float getObjMidY() {
return this.obj_mid_y;
}
public void setObjWidth(float w) {
this.obj_width = w;
}
public float getObjWidth() {
return this.obj_width;
}
public void setObjHeight(float h) {
this.obj_height = h;
}
public float getObjHeight() {
return this.obj_height;
}
}
附2----BaseView类:
import liqiang.flybird.MainActivity;
import liqiang.flybird.config.Constants;
import liqiang.flybird.util.SoundPlayer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class BaseView extends SurfaceView implements Callback, Runnable {
protected float scaleX;//背景图片缩放比例
protected float scaleY;
protected MainActivity mainActivity;
protected SoundPlayer soundPlayer;
protected Canvas canvas;//画布对象
protected Paint paint;//画笔对象
protected SurfaceHolder sfh;
protected Thread thread;//绘画线程
protected boolean threadFlag;//标记线程运行
//构造函数
public BaseView(Context context, SoundPlayer soundPlayer) {
super(context);
this.mainActivity = (MainActivity) context;
this.soundPlayer = soundPlayer;
this.sfh = this.getHolder();
this.sfh.addCallback(this);
this.paint = new Paint();
}
//线程运行的方法
@Override
public void run() {}
//初始化图片资源
public void initBitmap() {}
//释放图片资源
public void release() {}
//绘图方法
public void drawSelf() {}
//视图改变的方法
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {}
//视图创建的方法
@Override
public void surfaceCreated(SurfaceHolder arg0) {
Constants.SCREEN_WIDTH = this.getWidth();
Constants.SCREEN_HEIGHT = this.getHeight();
this.threadFlag = true;
}
//视图销毁的方法
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
this.threadFlag = false;
}
public void setThreadFlag(boolean threadFlag) {
this.threadFlag = threadFlag;
}
}
源码下载地址:
参考资料:
http://download.csdn.net/detail/qiang66666ok/7175747