zoukankan      html  css  js  c++  java
  • Android游戏开发:物理游戏之重力系统开发--圆形自由落体Demo

        本节为大家提供有关物理游戏的知识,讲解了一个简单的圆形自由落体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(),这样能更好的管理我们的代码结构,思路清晰,各尽其责,避免混乱。
  • 相关阅读:
    【数据挖掘导论】——绪论
    Debian Customer PPA RFC (by quqi99)
    uva 11248 Frequency Hopping (最大流)
    非常easy的JAVA反射教程
    【Spark】RDD操作具体解释4——Action算子
    NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
    eclipse中文凝视字体太小解决方法
    cocos2d-x-3.x bringToFront &amp; sendToBack实现
    POJ 1018 Communication System 题解
    监听器和 利 用观察者设计模式设计一个程序
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3706290.html
Copyright © 2011-2022 走看看