gpt4 book ai didi

android - SurfaceView 绘制性能

转载 作者:行者123 更新时间:2023-11-30 02:24:49 29 4
gpt4 key购买 nike

我正在使用 Android SurfaceView 编写测试应用程序。我想看看这是否是一种可行的 2D 游戏开发方法。目前性能不是太好。

似乎每隔 15 秒左右就会出现微小的抖动和减速。我只在屏幕上画了大约 30 个矩形。我希望它能够轻松地做到这一点。

我决定分析性能。我每 10 帧记录一次平均绘制时间。我注意到的是,它在绘制时间良好的时期出现,然后跳起来。我确定我的代码没有在游戏循环中分配内存,所以我认为这个问题不是 GC。

我注意到,性能下降了大约 100 帧,写在一个相当模糊的日志语句之后。有谁知道 android 正在打印的内容可能会发生什么。

每次我启动应用程序时,绘制时间都会在这个关于删除文件的日志语句之后下降....

01-18 16:53:20.221 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 14 01-18 16:53:20.589 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 18 01-18 16:53:20.919 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:21.250 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:21.581 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:21.911 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:22.241 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:22.572 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 13 01-18 16:53:22.906 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 18 01-18 16:53:23.277 552-650/? D/TaskPersister﹕ removeObsoleteFile: deleting file=5725_task.xml 01-18 16:53:23.278 552-650/? D/TaskPersister﹕ removeObsoleteFile: deleting file=5725_task_thumbnail.png 01-18 16:53:23.330 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 32 01-18 16:53:23.680 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 18 01-18 16:53:24.032 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 20 01-18 16:53:24.399 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 31 01-18 16:53:24.777 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 26 01-18 16:53:25.148 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 23 01-18 16:53:25.473 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 12 01-18 16:53:25.804 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 14 01-18 16:53:26.142 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 14 01-18 16:53:26.467 19296-19370/com.example.scott.coloursquares I/game_screen﹕ draw time = 14

最佳答案

SurfaceView 有两部分,Surface 和 View。 View 集成到所有其他 UI 元素中,并且可以与标准组件分层。您可以创建一个 custom View并使用 Canvas 在其上绘制。在所有最近的设备上,这将利用硬件加速,尽管 not all of the Canvas API已实现。

Surface 是一个完全独立的层,它合成在具有渲染 View 元素的层之上或之下。您可以在软件中使用 Canvas 或使用 OpenGL ES 在 GPU 上绘图。 GLSurfaceView 是 SurfaceView 的包装器,负责处理 EGL 设置和一些线程问题,但没有什么特别之处。有关将 GLES 与普通 SurfaceView 和 TextureView 一起使用的示例,请参阅 Grafika ,它有一个方便的库,其中包含所有 EGL 内容。

在 Surface 上的 Canvas 渲染不是硬件加速的。随着屏幕变大(按像素计算),渲染变得越来越昂贵。 Nexus 4 的 CPU+总线速度与像素数的比率非常好。在 Nexus 4 上流畅的动画在 Nexus 10 上会有点卡顿。(尝试 Grafika 的“多表面测试”,选择“弹跳”,观察日志中的帧速率。)

要获得良好的性能并为自己节省大量工作,花时间研究开源图形或游戏引擎可能是值得的。或者从一个现有的小项目开始,比如 Android Breakout .

关于android - SurfaceView 绘制性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015826/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com