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

本文介绍了一个基于Android的Ketris游戏实现中,绘图与游戏逻辑更新的具体机制。通过使用SurfaceView和自定义的绘图类KetrisCanvas,实现了游戏画面的实时更新和帧率控制。文章展示了如何利用Handler进行定时处理,以及SurfaceView的生命周期回调方法在游戏开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
}
//////////////

回家了没时间详细解释,有问题留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值