计算android view的FPS,使用Android SurfaceView的低FPS

使用SurfaceView我的帧率有一些小问题.我正在做我在一些教程中发现的典型内容(他们都说同样的话),但我无法在我的三星Galaxy S(旧的,i9000)上达到一个不错的帧率.

这是我对循环线程的代码. FPS初始化为30.

@Override

public void run() {

long ticksPS = 1000/FPS;

long startTime;

long sleepTime;

//fps checker

long contms=0;

long lasttimecheck = System.currentTimeMillis();

int fps=0;

while (running) {

long time = System.currentTimeMillis();

if(contms>1000) {

Log.v("FPS",String.valueOf(fps));

contms=time-lasttimecheck;

fps=1;

}

else {

fps++;

contms+=time-lasttimecheck;

}

lasttimecheck = time;

Canvas c = null;

startTime =time;

try {

c = view.getHolder().lockCanvas();

synchronized (view.getHolder()) {

view.onDraw(c);

}

} finally {

if (c != null) {

view.getHolder().unlockCanvasAndPost(c);

}

}

sleepTime = ticksPS-(System.currentTimeMillis() - startTime);

try {

if (sleepTime > 10)

sleep(sleepTime);

else {

Log.w("LOWFPS",String.valueOf(contms));

sleep(10);

}

} catch (Exception e) {}

}

}

在surfaceView中,我使用holder.setFormat(PixelFormat.RGBA_8888)初始化持有者;但我不知道我是否必须使用位图做一些事情以避免无用的CPU工作(我将位图保存在局部变量中,然后我绘制它们).游戏很简单,它应该运行得更快.

帧率是相当随机的,有时候它很有效,有时它不会,但总是在30FPS以下.

有任何想法吗???

用ONDRAW解释编辑

@Override

protected void onDraw(Canvas canvas) {

canvas.drawBitmap(bg, 0, 0, null); //1

stars.draw(canvas,dx,dy); //2

if(playing.on()) reactors.draw_reaccio(canvas,dx,dy); //3

gotes.draw(canvas,dx,dy); //4

reactors.draw(canvas,dx,dy); //5

sg.draw(canvas); //6

sr.draw(canvas); //7

eraser.draw(canvas); //8

playing.draw(canvas); //9

opcions.draw(canvas); //10

}

1)绘制背景(480×800)

2)这是一个包含“getHeight()”基本对象(星号)列表的类,其中包含其坐标(x,y)和带有相关图像的ID(约9个不同的星形图像)

3)它绘制n * 2个圆圈,一个带有填充,另一个带有每个相关对象的笔划(大约20左右)

4)它绘制了游戏的主要对象,带有动画的小滴.有9种不同类型的水滴,每种都有5个相关的动画图像(我应该把5个图像放在1个吗?)

5)与drop相同但没有动画

6到10)无关紧要,它只是画一个图像

我猜这个慢的原因是:(2)由于动画的星数(4),巫婆每2-3帧换一个不同的图像,也许它对于记忆来说太多了,我想我应该合并所有图片只有1个.

S. Galaxy S i9000的帧速率约为20-22 FPS

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值