一、现状

如今直播类、视频播放器等基本都有弹幕模式。

为了保持性能和内存可控,基本是在初始化的时候生成一个Pool(Pool的容量是设定好的), 也就是利用重用机制(可以想象一下UITableView的重用机制,但是这个Pool和tableview机制略有不同)。每生成一个弹幕就丢到Pool里,当达到Pool最大容量时,就得等待,等待Pool里的某个弹幕A飞出屏幕外完成这一任务,然后再取 队列里的 弹幕任务, 赋于该 弹幕A新生。当弹幕量特别大的时候, 服务器 或是 客户端就不得 不对 队列的弹幕任务进行取舍,因为你没有办法处理那么多的弹幕。延迟太久,体验会太差。

二、实际需求问题

这时候你们的产品肯定不干了,为什么不能多显示点弹幕?不管你重叠还是什么,你得把弹幕尽最大可能展示出来,这样才能显示出这个房间 或是 视频的 人气么,要的就是弹幕炸屏效果!(程序员只能说臣妾做不到啊!弹幕多,会卡爆了!)

为了保持帧率,弹幕的最大量肯定是有上限的,那怎么突破上限而不影响性能呢?

楼主突发奇想,为啥子 粒子效果那么 炫,粒子那么多可以妥妥的展示而不影响性能呢?

我们是否可以把弹幕当成粒子呢?

三、解决方案设计

我们需要了解两个类,一个是 CAEmitterLayer ,一个是 CAEmitterCell 。

我们需要做的:

1.把弹幕背景 和 文字 转换成 CGImageRef 赋值给 CAEmitterCell ->contents

2.定时器,定时更换 CAEmitterLayer -> emitterCells 粒子源(弹幕)

3.协调好生命周期 ,CAEmitterCell->birthRate , CAEmitterCell->lifetime , CAEmitterCell->lifetimeRange , 以及你的定时器刷新周期。

4.CAEmitterCell一些生成位置什么的自己看了。

小结:楼主测试了下每秒1000个弹幕(纯随机数字弹幕,设备iphone 6 16G),妥妥的60fps 不掉帧,不过切换界面会有一点点卡顿,可以接受(可以在离开界面前关闭弹幕或是其它优化一下)。

有需求的朋友可以尝试尝试,反正我是用不到。(不过粒子弹幕缺点是,弹出去的弹幕如泼出去的水,是不可控的,没法监测碰撞 点击等事件)







最新文章

  1. JSP中动态include和静态include的区别(简版)
  2. 10.openssl x509
  3. 高亮 TRichEdit 当前行
  4. Javascript:是你的高阶函数
  5. 使用ifconfig命令给网卡配置ip别名
  6. Jquery网页选项卡应用
  7. cron 定时任务
  8. 常用Select语句
  9. win32多线程编程
  10. web.xml组件加载顺序
  11. JAVA_SE基础——43.抽象类
  12. win10 如何关掉自带的杀毒软件 window defender
  13. Qt程序ibus输入法不跟随
  14. python bytes类型
  15. A-Softmax的总结及与L-Softmax的对比——SphereFace
  16. 如何在Windows中使用netsh命令进行端口转发
  17. Android启动流程
  18. DOM-使用节点
  19. POJ 2151 Check the difficulty of problems 概率dp+01背包
  20. onvif协议client与server对接

热门文章

  1. IOS 开发之--获取真机的deviceToeken
  2. fopen()函数文件模板中w,w+,a,a+的区别
  3. DOM API querySelector与querySelectorAll的用法
  4. 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
  5. Android自定义控件之圆形进度条ImageView
  6. jquery页面滚动显示浮动菜单栏锚点定位效果
  7. 1.引入jQuery
  8. 关于HashSet在 java7 与 java8的不同
  9. python包管理一防丢失
  10. window7配置SQLserver 允许被远程连接