我正在寻找示例代码示例,展示如何使用 Android SurfaceView每秒达到30帧?假设每个框架从x和y位置开始绘制一个圆,每个框架将x和y增加1。如何使用Android SurfaceView实现每秒30帧?
奖励问题: 除上述之外,我想覆盖另一个视图以显示文本内容,以便在此文本内容下显示任何图形。如何做到这一点?
我正在寻找示例代码示例,展示如何使用 Android SurfaceView每秒达到30帧?假设每个框架从x和y位置开始绘制一个圆,每个框架将x和y增加1。如何使用Android SurfaceView实现每秒30帧?
奖励问题: 除上述之外,我想覆盖另一个视图以显示文本内容,以便在此文本内容下显示任何图形。如何做到这一点?
让一个线程执行此30次:
事实上,如果你的线程只是坐在那里做,而不试图暂停,它将被扼杀到屏幕的帧速率。
您需要确保该线程与表面视图的管理正确同步 - 例如,如果表面正在更改或被销毁,那么您的代码应该与线程同步以确保线程停止运行有时候是这样的。
当然这意味着你正在软件渲染到画布中。根据你在做什么,这可能很好,给你30帧/秒的动画。如果没有,你需要使用GLSurfaceView。无论如何,您可能会考虑使用它,只是因为它会为您处理线程部分。
如果你想要高帧率,你真的需要阅读GLSurfaceView。在正常的表面视图下,您将受到费用布局计算和以CPU为中心的渲染的束缚。借助GLSurfaceView,您可以将其卸载到GPU上,并对布局进行严格有效的控制。
这可能是一个古老的线程,但我认为这可以帮助其他人。 这里是一个很好的教程中,我使用surfaceView发现: http://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html
这里是关于如何实现游戏环,它可以帮助限制FPS 30一篇好文: http://www.koonsolo.com/news/dewitters-gameloop/
您可以添加文字直接向您的surfaceView如果你喜欢, 下面是一个例子
public void onDraw(Canvas canvas) {
...
// Add text
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFakeBoldText(true); // if you like bold
paint.setShadowLayer(5, 5, 5, Color.GRAY); // add shadow
paint.setColor(Color.WHITE);
paint.setTextSize(30);
canvas.drawText("FPS: " + _fps, 10, 35, paint);
}
GLSurfaceView能加速绘图(因为你使用OpenGL绘制的话)。它不排除布局计算......事实上,在绘制过程中不应该有布局计算,甚至是绘制常规视图层次结构。 – hackbod 2011-01-30 22:10:41
“它不会摆脱布局计算” - 我说过了吗? “在绘图期间不应该有布局计算发生” - 我没有说我是不是?但是,谈论**帧速率**通常意味着某些东西在移动/改变,这会影响布局计算。如果你使用本地布局管理器,这将是昂贵的。 – 2011-01-30 23:32:44