繁体   English   中英

如何使用Android SurfaceView实现每秒30帧?

[英]How to achieve 30 frames per second using Android SurfaceView?

我正在寻找示例代码示例,演示如何使用Android SurfaceView实现每秒30帧? 假设每个帧从位置x和y开始绘制一个圆,并且每个帧将x和y递增1。

奖金问题:除此之外,我想覆盖另一个视图以显示文本内容,以便绘制任何图形显示在此文本内容下方。 怎么做到这一点?

如果你想要高帧率,你真的需要阅读GLSurfaceView 在正常的表面视图下,您将受费用布局计算和以CPU为中心的渲染的支配。 使用GLSurfaceView,您可以将其卸载到GPU并对布局进行严格有效的控制。

创建一个每秒执行30次的线程:

  1. 调用SurfaceHolder.lockCanvas()。
  2. 绘制到画布中(必须完全重绘所有像素)。
  3. 调用SurfaceHolder.unlockCanvasAndPost()。

事实上,如果您的线程只是坐在那里而不试图暂停,它将被限制为屏幕的帧速率。

您需要确保此线程与表面视图的管理正确同步 - 例如,如果表面正在更改或被销毁,那么您的代码应该与线程同步以确保线程在发生这种情况时停止运行。

当然,这确实意味着您正在将软件渲染到画布中。 根据你正在做的事情,这可能很适合给你30fps的动画。 如果没有,您将需要使用GLSurfaceView。 您可能还是想考虑使用它,因为它会为您处理线程部分。

这可能是一个老线程,但我认为这可以帮助其他人。 这是我在使用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);             
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM