android游戏之flabby bird(上)

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;
	}
}



源码下载地址:


参考资料:

1. android高仿flappy bird源码

http://download.csdn.net/detail/qiang66666ok/7175747


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。