標籤:android des style blog class code
本節為大家提供有關物理遊戲的知識,講解了一個簡單的圓形自由落體Demo的編寫。。Java代碼package com.himi; import java.util.Random; import java.util.Vector; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; public class MySurfaceViee extends SurfaceView implements Callback, Runnable { private Thread th; private SurfaceHolder sfh; private Canvas canvas; private Paint paint; private boolean flag; public static int screenW, screenH; private Vector<MyArc> vc;//這裡定義裝我們自訂圓形的容器 private Random ran;//隨即庫 public MySurfaceViee(Context context) { super(context); this.setKeepScreenOn(true); vc = new Vector<MyArc>(); ran = new Random();//備忘1 sfh = this.getHolder(); sfh.addCallback(this); paint = new Paint(); paint.setAntiAlias(true); setFocusable(true); } public void surfaceCreated(SurfaceHolder holder) { flag = true;//這裡都是上一篇剛講過的。。。 th = new Thread(this); screenW = this.getWidth(); screenH = this.getHeight(); th.start(); } public void draw() { try { canvas = sfh.lockCanvas(); canvas.drawColor(Color.BLACK); if (vc != null) {//當容器不為空白,遍曆容器中所有圓形畫方法 for (int i = 0; i < vc.size(); i++) { vc.elementAt(i).drawMyArc(canvas, paint); } } } catch (Exception e) { // TODO: handle exception } finally { try { if (canvas != null) sfh.unlockCanvasAndPost(canvas); } catch (Exception e2) { } } } private void logic() {//主邏輯 if (vc != null) {//當容器不為空白,遍曆容器中所有圓形邏輯 for (int i = 0; i < vc.size(); i++) { vc.elementAt(i).logic(); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //當按鍵事件響應,我們往容器中仍個我們的圓形執行個體 vc.addElement(new MyArc(ran.nextInt(this.getWidth()), ran.nextInt(100), ran.nextInt(50))); return true; } public void run() { // TODO Auto-generated method stub while (flag) { logic(); draw(); try { Thread.sleep(100); } catch (Exception ex) { } } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.v("Himi", "surfaceChanged"); } public void surfaceDestroyed(SurfaceHolder holder) { flag = false; } } OK,代碼都很簡單,也很清晰! 稍微說一句:像MyArc裡面也有類似MysurfaceView中一樣的方法 logic() 以及draw(),這樣能更好的管理我們的代碼結構,思路清晰,各盡其責,避免混亂。