Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發教程:手把手教你寫跳躍類游戲(一)

Android游戲開發教程:手把手教你寫跳躍類游戲(一)

編輯:Android游戲開發

  前言:

  看了不少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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved