大佬教程收集整理的这篇文章主要介绍了使用Android SurfaceView的低FPS,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我对循环线程的代码. 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,null); //1 stars.draw(canvas,dx,dy); //2 if(playing.on()) reactors.draw_reaccio(canvas,dy); //3 gotes.draw(canvas,dy); //4 reactors.draw(canvas,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
以上是大佬教程为你收集整理的使用Android SurfaceView的低FPS全部内容,希望文章能够帮你解决使用Android SurfaceView的低FPS所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。