首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

买了本android应用开发揭秘关于游戏开发那章的有关问题

2012-10-05 
买了本android应用开发揭秘关于游戏开发那章的问题在surfaceView类开发框架中Java codepackage y.bimport

买了本android应用开发揭秘关于游戏开发那章的问题
在surfaceView类开发框架中

Java code
package y.b;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;/** * @author yubin * @version 2012-9-11 上午10:08:22 **/public class Gamesurfaceview extends SurfaceView implements Callback, Runnable {    // 控制循环    boolean mbLoop = false;    SurfaceHolder mSurfaceHolder = null;    int miCount = 0;    int x = 50, y = 50;    public Gamesurfaceview(Context context) {        super(context);        // 得到SurfaceHolder实例        mSurfaceHolder = this.getHolder();        // 添加回调函数 创建修改销毁方法        mSurfaceHolder.addCallback(this);        // 只有当该View获得焦点时才会调用onKeyDown方法        this.setFocusable(true);        mbLoop = true;    }    @Override    public void run() {        while(mbLoop) {            try {                Thread.sleep(200);            }            catch(Exception e) {            }            synchronized(mSurfaceHolder) {                Draw();            }        }    }    private void Draw() {        // 锁定画布,得到Canvas        Canvas canvas = mSurfaceHolder.lockCanvas();        if(miCount < 100) {            miCount++;        }        else {            miCount = 0;        }        // 设置画笔        Paint mpaint = new Paint();        // 设置无锯齿        mpaint.setAntiAlias(true);        mpaint.setColor(Color.BLACK);        // 清屏        canvas.drawRect(0, 0, 320, 480, mpaint);        switch(miCount % 4) {            case 0:                mpaint.setColor(Color.BLUE);                break;            case 1:                mpaint.setColor(Color.GREEN);                break;            case 2:                mpaint.setColor(Color.RED);                break;            case 3:                mpaint.setColor(Color.YELLOW);                break;            default:                mpaint.setColor(Color.WHITE);                break;        }        // 画实心矩形        canvas.drawCircle((320 - 25) / 2, y, 50, mpaint);        // 解锁画布绘制        mSurfaceHolder.unlockCanvasAndPost(canvas);    }    // surface创建时激发    @Override    public void surfaceCreated(SurfaceHolder holder) {        // 开启绘图线程        new Thread(this).start();    }    // surface改变时激发    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {        // TODO Auto-generated method stub    }    // surface销毁时激发    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        // 停止循环        mbLoop = false;    }}

他教我这么写
但是我发现在使用back键退出时会报空java.lang.NullPointerException
为什么
到底该这么搞啊?


[解决办法]
你退出的时候 线程开没来得及退出 这时候线程调用draw方法 就空指了
在线程里调用draw方法前加一个判断语句就行

热点排行