正文  游戏开发 > 游戏示例/源码 >

Android游戏开发20:物理游戏之重力系统开发--圆形自由落体Demo

本节为大家提供有关物理游戏的知识,讲解了一个简单的圆形自由落体Demo的编写。。 Java代码 packagecom.himi; importjava.util.Random;......

       本节为大家提供有关物理游戏的知识,讲解了一个简单的圆形自由落体Demo的编写。。

Java代码
  1. package com.himi;   
  2. import java.util.Random;   
  3. import java.util.Vector;   
  4. import android.content.Context;   
  5. import android.graphics.Canvas;   
  6. import android.graphics.Color;   
  7. import android.graphics.Paint;   
  8. import android.util.Log;   
  9. import android.view.KeyEvent;   
  10. import android.view.SurfaceHolder;   
  11. import android.view.SurfaceView;   
  12. import android.view.SurfaceHolder.Callback;   
  13. public class MySurfaceViee extends SurfaceView implements Callback, Runnable {   
  14.     private Thread th;   
  15.     private SurfaceHolder sfh;   
  16.     private Canvas canvas;   
  17.     private Paint paint;   
  18.     private boolean flag;   
  19.     public static int screenW, screenH;   
  20.     private Vector<MyArc> vc;//这里定义装我们自定义圆形的容器   
  21.     private Random ran;//随即库   
  22.     public MySurfaceViee(Context context) {   
  23.         super(context);   
  24.         this.setKeepScreenOn(true);   
  25.         vc = new Vector<MyArc>();   
  26.         ran = new Random();//备注1   
  27.         sfh = this.getHolder();   
  28.         sfh.addCallback(this);   
  29.         paint = new Paint();   
  30.         paint.setAntiAlias(true);   
  31.         setFocusable(true);   
  32.     }   
  33.     public void surfaceCreated(SurfaceHolder holder) {   
  34.         flag = true;//这里都是上一篇刚讲过的。。。   
  35.         th = new Thread(this);   
  36.         screenW = this.getWidth();   
  37.         screenH = this.getHeight();   
  38.         th.start();   
  39.     }   
  40.     public void draw() {   
  41.         try {   
  42.             canvas = sfh.lockCanvas();   
  43.             canvas.drawColor(Color.BLACK);   
  44.             if (vc != null) {//当容器不为空,遍历容器中所有圆形画方法   
  45.                 for (int i = 0; i < vc.size(); i++) {   
  46.                     vc.elementAt(i).drawMyArc(canvas, paint);   
  47.                 }   
  48.             }   
  49.         } catch (Exception e) {   
  50.             // TODO: handle exception   
  51.         } finally {   
  52.             try {   
  53.                 if (canvas != null)   
  54.                     sfh.unlockCanvasAndPost(canvas);   
  55.             } catch (Exception e2) {   
  56.             }   
  57.         }   
  58.     }   
  59.     private void logic() {//主逻辑   
  60.         if (vc != null) {//当容器不为空,遍历容器中所有圆形逻辑   
  61.             for (int i = 0; i < vc.size(); i++) {   
  62.                 vc.elementAt(i).logic();   
  63.             }   
  64.         }   
  65.     }   
  66.     @Override  
  67.     public boolean onKeyDown(int keyCode, KeyEvent event) {   
  68.         //当按键事件响应,我们往容器中仍个我们的圆形实例   
  69.         vc.addElement(new MyArc(ran.nextInt(this.getWidth()), ran.nextInt(100), ran.nextInt(50)));   
  70.         return true;   
  71.     }   
  72.     public void run() {   
  73.         // TODO Auto-generated method stub   
  74.         while (flag) {   
  75.             logic();   
  76.             draw();   
  77.             try {   
  78.                 Thread.sleep(100);   
  79.             } catch (Exception ex) {   
  80.             }   
  81.         }   
  82.     }   
  83.     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {   
  84.         Log.v("Himi""surfaceChanged");   
  85.     }   
  86.     public void surfaceDestroyed(SurfaceHolder holder) {   
  87.         flag = false;   
  88.     }   
  89. }  

       OK,代码都很简单,也很清晰! 稍微说一句:像MyArc里面也有类似MysurfaceView中一样的方法 logic() 以及draw(),这样能更好的管理我们的代码结构,思路清晰,各尽其责,避免混乱。

来自:http://www.himigame.com/android-game/354.html