您的位置:首页 > 移动开发 > Android开发

Android游戏开发2种FPS 实现比较

2009-12-18 18:18 465 查看
1.

private boolean drawall=false;

private RefreshHandler mRedrawHandler = new RefreshHandler();

class RefreshHandler extends Handler {

@Override

public void handleMessage(Message msg) {

KetrisCanvas.this.update();

KetrisCanvas.this.invalidate();

}

public void sleep(long delayMillis) {

this.removeMessages(0);

sendMessageDelayed(obtainMessage(0), delayMillis);

}

};

long mLastMove=0;

long mMoveDelay=30;

public void update() {

long now = System.currentTimeMillis();

if (now - mLastMove > mMoveDelay) {

//gameLogic(); 这里是游戏逻辑



mLastMove = now;

}

mRedrawHandler.sleep(mMoveDelay);



}

public void onDraw(Canvas canvas)

{super.onDraw(canvas);

this.paint(); //这里是绘制到缓冲屏幕

canvas.drawBitmap(g.offs, 0, 0, g.p);

}

在适当位置执行update();

2.

public class KetrisCanvas extends SurfaceView implements SurfaceHolder.Callback

{

在构造方法完成 下面2句

holder = this.getHolder();//获取holder

holder.addCallback(this);



@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub



}

Thread t;

boolean isrun=true;

final SurfaceHolder holder;

@Override

public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub



t=new Thread(){

public void run()

{ while(isrun)

{

long start=System.currentTimeMillis();

Canvas canvas=KetrisCanvas.this.holder.lockCanvas(null);

//这里完成游戏逻辑

paint();//这里是屏幕绘制

canvas.drawBitmap(g.offs, 0, 0,null );



KetrisCanvas.this.holder.unlockCanvasAndPost(canvas);

long end=System.currentTimeMillis();

if(200>end-start)

{

try{Thread.sleep(200-(end-start));}catch(Exception e){}

}

}

}

};

t.start();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

if(t!=null)

{ isrun=false;

}

}

//////////////

回家了没时间详细解释,有问题留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐