android 游戏开发 bitmap绘制效率问题

Dr_FIA 2013-03-04 11:31:21
把一张480*800 Bitmap(屏幕尺寸)绘制之后,帧数一下从60fps掉到不到40fps,请教该怎么办?
作为游戏的背景图片,这张大位图的绘制是必须的,可一旦绘制帧数就保不住
哪些游戏厂商的2D游戏是怎么处理这个问题的啊??

所用技术:surfaceview框架 图片绘制:bitmap+canvas。。。
...全文
647 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdong20 2013-03-07
  • 打赏
  • 举报
回复
尽量在绘制bitmap时不要用缩放,保持画面原来的大小
suntao222 2013-03-07
  • 打赏
  • 举报
回复
在网上看到关于图形加速方面的一些东西,感觉有点用,贴出来你看看有帮助没。 切换到硬件加速的2D图形能够有效改善性能但是依然要通过以下推荐的方式来设计应用程序以便有效的使用GPU 1. 减少应用程序中View对象的数量 系统绘制越多的View对象就会越慢。这种情况也适用于软件呈现管道。减少View对象的有效方法之一就是优化UI。 2. 避免过度绘图 在彼此的顶部不要绘制太多的层。因为删除View时要同时删除遮盖在该View对象之上所有其他的不透明的View对象。如果需要绘制几个图层要尽量在上面采用合成模式考虑把它们合并成一个层。一个好的规则是每帧的像素数不要大于屏幕上像素数的2.5倍以位图的透明点阵数来计算。 3. 不要在绘图方法中创建呈现对象 一个常见的错误时每次调用呈现方法时创建一个新的Paint对象或Path对象。这样就会强制频繁的运行垃圾回收并且会绕过硬件管道中的缓存和优化。 4. 不要经常的编辑形状 对于复杂的形状如路径和圆是使用纹理掩码来呈现的。每次创建或修改路径硬件通道都要创建一个新的掩码这样会消耗大量的资。 这个应该是GOOGLE开发者网站上翻译过来的,http://developer.android.com/guide/topics/graphics/hardware-accel.html
Dr_FIA 2013-03-07
  • 打赏
  • 举报
回复
引用 17 楼 wangdong20 的回复:
尽量在绘制bitmap时不要用缩放,保持画面原来的大小
嗯,缩放的确很耗时,在游戏主界面中没使用图片缩放。
gamedragon 2013-03-06
  • 打赏
  • 举报
回复
引用 7 楼 Dr_FIA 的回复:
引用 6 楼 gamedragon 的回复:切成几块,只重画需要更新的地方。 比如飞行设计类的游戏,背景是卷轴的,一直在动,整个画面时时都要更新啊
那每次画一整屏大小的位图和4次每次画1/4大小的位图哪个更快呢?
suntao222 2013-03-06
  • 打赏
  • 举报
回复
使用硬件加速试试 : android:hardwareAccelerated="true"
Dr_FIA 2013-03-06
  • 打赏
  • 举报
回复
引用 11 楼 gamedragon 的回复:
引用 7 楼 Dr_FIA 的回复: 引用 6 楼 gamedragon 的回复:切成几块,只重画需要更新的地方。 比如飞行设计类的游戏,背景是卷轴的,一直在动,整个画面时时都要更新啊 那每次画一整屏大小的位图和4次每次画1/4大小的位图哪个更快呢?
嗯有些明白了,具体怎么操作,是不是得自己创建个屏幕大小的bitmap缓冲一下?
Dr_FIA 2013-03-06
  • 打赏
  • 举报
回复
引用 10 楼 suntao222 的回复:
使用硬件加速试试 : android:hardwareAccelerated="true"
加上这句后感觉对象少、帧数高的时候帧数稍有提升;而对象多,比较卡的时候似乎没什么改善。
Dr_FIA 2013-03-06
  • 打赏
  • 举报
回复
引用 13 楼 c16882599 的回复:
打印看一下canvas.drawbitmap这个方法所消耗的时间,如果时间很短没有影响到 帧数的变化,那么就是你bitmap的处理有问题。如果这个时间很长,我也不知道怎么 解决了,用opengl应该会快点吧
全部的canvas.drawbitmap大概用掉40%~50%的时间。全部游戏逻辑占用大概10%~20%的时间。剩下的时间暂时没找出是哪里消耗的
c16882599 2013-03-06
  • 打赏
  • 举报
回复
打印看一下canvas.drawbitmap这个方法所消耗的时间,如果时间很短没有影响到 帧数的变化,那么就是你bitmap的处理有问题。如果这个时间很长,我也不知道怎么 解决了,用opengl应该会快点吧
Imgnation 2013-03-05
  • 打赏
  • 举报
回复
怎么会!!android那些游戏怎么做出来的?
Dr_FIA 2013-03-05
  • 打赏
  • 举报
回复
引用 2 楼 suntao222 的回复:
用一个像素的平铺
具体如何操作?能加快这张大位图的绘制速度吗?
suntao222 2013-03-05
  • 打赏
  • 举报
回复
用一个像素的平铺
Dr_FIA 2013-03-05
  • 打赏
  • 举报
回复
真想吐槽android的API,难道在不优化的前提下,把一张屏幕大小的位图每秒绘制60+次就不能实现吗?
Dr_FIA 2013-03-05
  • 打赏
  • 举报
回复
引用 4 楼 Vestigge 的回复:
怎么会!!android那些游戏怎么做出来的?
还是咱优化的不行,优化。。优化。。。
Dr_FIA 2013-03-05
  • 打赏
  • 举报
回复
引用 5 楼 intuition444 的回复:
40帧还不能接受吗? 相当于25毫秒显示一张图。 60帧是16.7毫秒显示一张图, 差距有那么大?能看出区别来? 绝大多数1080P的视频也就只有30帧而已。
视频30帧完全OK,游戏30帧用户会明显感觉不爽,一般游戏50~60帧用户感受较好。 而且目前40帧是开发初期,后期对象多了估计就掉到30帧了。
Dr_FIA 2013-03-05
  • 打赏
  • 举报
回复
引用 6 楼 gamedragon 的回复:
切成几块,只重画需要更新的地方。
比如飞行设计类的游戏,背景是卷轴的,一直在动,整个画面时时都要更新啊
gamedragon 2013-03-05
  • 打赏
  • 举报
回复
切成几块,只重画需要更新的地方。
intuition444 2013-03-05
  • 打赏
  • 举报
回复
40帧还不能接受吗? 相当于25毫秒显示一张图。 60帧是16.7毫秒显示一张图, 差距有那么大?能看出区别来? 绝大多数1080P的视频也就只有30帧而已。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧