前言:

  看了不少Andriod游戏开发方面的博客,发现大多都是讲解某一方面的知识,没有一个完整的开发教程。

  所以我就写了这样一个系列的博客,完整的描述整个游戏的开发过程。

  希望能给大家一点帮助,同时也希望大家能给出好的建议。我们共同学习~

  好了进入正题:

  这是第一篇,里面涉及到的东西都比较基础~~~

  1.游戏介绍:这次编写的游戏是一款跳跃类游戏,类似与涂鸦跳跃。我们通过小球触碰方块,完成小球的跳跃。我们将在这一列的博客中来实现这款游戏的开发。

  2.最终成品展示

Android游戏开发教程:手把手教你写跳跃类游戏(一)Android游戏开发教程:手把手教你写跳跃类游戏(一)

Android游戏开发教程:手把手教你写跳跃类游戏(一)

  这个是程序的最终效果。每个小方块都有许多运动方式,水平的,垂直的,静止的,圆周运动的。。。同时每个小方块都有不同的属性。有的碰到会消失,有的弹性更好等等。。。具体的设计方法我会后面几篇文章详细介绍。童鞋们也可以先自己想想看,怎么设计这个游戏。

  3.这节课主要完成基本框架的搭建:我们采用SurfaceView实现游戏,(View一般用来做那些不需要一直刷新的游戏:如五子棋,连连看之类的)。

  SurfaceView默认实现双缓冲。所以在效率上会高一点。

  所谓双缓冲简单的理解就是把要画在屏幕上的图案,先画到一张画布(如Bitmap)上,然后再把这张画布直接画到屏幕上,这样就可以避免闪烁现象。

  我们先建一个Android project。

Android游戏开发教程:手把手教你写跳跃类游戏(一)

Android游戏开发教程:手把手教你写跳跃类游戏(一)

  然后建一个GameView。也就是SurfaceView的子类。项目的机构图:

Android游戏开发教程:手把手教你写跳跃类游戏(一)

  附上代码:

Java代码
  1. package jumpball.game;    
  2.     
  3. import android.app.Activity;    
  4. import android.os.Bundle;    
  5. import android.util.DisplayMetrics;    
  6. import android.view.Window;    
  7. import android.view.WindowManager;    
  8.     
  9. public class GameActivity extends Activity {    
  10.     GameView mView;    
  11.     public void onCreate(Bundle savedInstanceState) {    
  12.         super.onCreate(savedInstanceState);    
  13.             
  14.         requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置无标题     
  15.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,    
  16.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏模式     
  17.         //获取系统的屏幕属性     
  18.         DisplayMetrics dm = new DisplayMetrics();    
  19.         getWindowManager().getDefaultDisplay().getMetrics(dm);    
  20.             
  21.         mView = new GameView(this, dm.widthPixels, dm.heightPixels);    
  22.         //应用这个布局     
  23.         setContentView(mView);    
  24.     }    
  25. }    

  GameView.java

Java代码
  1. package jumpball.game;    
  2.     
  3. import android.content.Context;    
  4. import android.graphics.Canvas;    
  5. import android.graphics.Color;    
  6. import android.graphics.Paint;    
  7. import android.view.SurfaceHolder;    
  8. import android.view.SurfaceView;    
  9. import android.view.SurfaceHolder.Callback;    
  10.     
  11. //本身就是一个Runnable接口     
  12. public class GameView extends SurfaceView implements Callback, Runnable {    
  13.     public int width, height;    
  14.     private Canvas mCanvas;    
  15.     //刷新界面线程     
  16.     private Thread mThread;    
  17.     //处理者     
  18.     private SurfaceHolder mSurfaceHolder;    
  19.     private boolean mIsRunning = false;    
  20.     private int TIME_IN_FRAME = 50;    
  21.     GameActivity gameActivity;    
  22.     
  23.     public GameView(Context context, int width, int height) {    
  24.         super(context);    
  25.         //setFocusable(true);     
  26.         //activity是 context的一个子类。     
  27.         gameActivity = (GameActivity) context;    
  28.         this.width = width;    
  29.         this.height = height;    
  30.             
  31.         mSurfaceHolder = getHolder();    
  32.         mSurfaceHolder.addCallback(this);    
  33.     }    
  34.     
  35.     public void mDraw() {    
  36.         //设置画布的颜色     
  37.         mCanvas.drawColor(Color.WHITE);    
  38.         drawBG(mCanvas);    
  39.     }    
  40.     
  41.     public void drawBG(Canvas mCanvas) {    
  42.         Paint mPaint = new Paint();    
  43.         mPaint.setColor(Color.BLACK);    
  44.         //设置透明度     
  45.         mPaint.setAlpha(50);    
  46.         //设置抗锯齿     
  47.         mPaint.setAntiAlias(true);    
  48.         float h = height * 0.01666667f;    
  49.         for (int i = 0; i < height; i += h) {    
  50.             mCanvas.drawLine(0, i, width, i, mPaint);    
  51.         }    
  52.     }    
  53.     public void surfaceChanged(SurfaceHolder holder, int format, int width,    
  54.             int height) {    
  55.     }    
  56.     
  57.     public void surfaceCreated(SurfaceHolder holder) {    
  58.         mIsRunning = true;    
  59.         //新建一个刷屏线程     
  60.         mThread = new Thread(this);    
  61.         mThread.start();    
  62.     }    
  63.     
  64.     public void surfaceDestroyed(SurfaceHolder holder) {    
  65.         //销毁这个,     
  66.         mIsRunning=false;    
  67.     }    
  68.     
  69.     public void run() {    
  70.         //决定线程是否继续执行     
  71.         while (mIsRunning) {    
  72.             long startTime = System.currentTimeMillis();    
  73.             //调用mDraw进行绘制     
  74.             synchronized (mSurfaceHolder) {    
  75.                 mCanvas = mSurfaceHolder.lockCanvas();    
  76.                 mDraw();    
  77.                 mSurfaceHolder.unlockCanvasAndPost(mCanvas);    
  78.             }    
  79.                 
  80.             long endTime = System.currentTimeMillis();    
  81.                 
  82.             int diffTime = (int) (endTime - startTime);    
  83.                 
  84.             while (diffTime < TIME_IN_FRAME) {    
  85.                 diffTime = (int) (System.currentTimeMillis() - startTime);    
  86.                 Thread.yield();    
  87.             }    
  88.         }    
  89.     }    
  90. }    

  上一个最终的运行效果图:

Android游戏开发教程:手把手教你写跳跃类游戏(一)

  源码下载地址 http://www.linuxidc.com/Linux/2012-02/54645p4.htm

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/game/583.html
2016年6月12日
发布:鸡啄米 分类:Android游戏开发 浏览: 评论:0