Android游戲開發教程:手教你寫跳躍類游戲


 

Android游戲開發教程:手教你寫跳躍類游戲

  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. }  
[java] view plaincopyprint?
  1. GameView.java  
[java] view plaincopyprint?
  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. }  

 

  1. 游戲介紹:這次編寫的游戲是一款跳躍類游戲,類似與塗鴉跳躍。我們通過小球觸碰方塊,完成小球的跳躍。我們將在這一列的博客中來實現這款游戲的開發。
  2. 小小游戲,只供娛樂!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM