iOS开源弹幕库BarrageRenderer

这是一个 iOS 上的开源弹幕渲染库.

弹幕实质是多个精灵的时间上的渲染方式. PC/Web上已经有很成熟的解决方案了; Android上比较有名的是BiliBili开源的DanmakuFlameMaster, 但是开源社区尚没有比较好的iOS弹幕渲染器.觉得在二次元文化逐渐渗透的今天,视频弹幕已经是很重要的一种情绪表达方式了.没必要重复造轮子,所以我把自己写的一份弹幕渲染引擎开源了.

先看看特征:

  • 提供过场弹幕(4种方向)与悬浮弹幕(2种方向)支持.
  • 弹幕字体可定义: 颜色,边框,圆角,背景,字体等皆可定制.
  • 自动轨道搜寻算法,新发弹幕会根据相同方向的同种弹幕获取最佳运动轨道.
  • 支持延时弹幕,为反复播放弹幕提供可能.
  • 独立的动画时间系统, 可以统一调整动画速度.
  • 丰富的扩展接口, 实现了父类的接口就可以自定义弹幕动画.
  • 因为作者记性比较差,所以在很多紧要处添加了注释,理解代码更容易.

这是一份简单的效果动画:

BarrageRenderer范例

BarrageRenderer Demo

实现机制简洁:

主要分3个某块:

  • BarrageLoader: 负责弹幕的持久化(暂未实现).
  • BarrageEngine: 利用CADisplayLink推动弹幕的渲染,支持动画加速功能;通过BarrageDispatcher类实现延时功能.
  • BarrageSprite: 弹幕精灵,即一条弹幕的模型表示;集成相应的精灵类并实现特定的方法可以实现自定义弹幕动画.

目前, 渲染器中实现了浮动弹幕与过场弹幕,两种弹幕的核心功能在BarrageWalkTextSprite\BarrageFloatTextSprite类方法

- (CGPoint)originInBounds:(CGRect)rect withSprites:(NSArray *)sprites

中,此方法通过分割view网格来检测冲突,从而尽可能小地降低当前显示弹幕的重叠概率.

而实现文本绘制功能的是BarrageTextSpirt类的draw方法.在弹幕很多的情况下动画可能出现卡顿,优化此绘制方法是提升性能的关键.

有Demo, 就不用太多说明了吧; 有源码, 就不用太多介绍了吧. 好吧, 是我懒 →_→.

其他:

之所以不用很多项目中使用的Danmaku命名,是因为我觉得这个单词长得比较丑 !≥△≤!. 原谅我吧.

弹幕渲染引擎的Github地址: https://github.com/unash/BarrageRenderer

注:工程会不断更新,介绍以Github为准。

标签: , , , , ,
19 comments on “iOS开源弹幕库BarrageRenderer
  1. 许ios说道:

    弹幕文字的大小如何设置啊

  2. 南瓜说道:

    当只有一行弹道且速度相同时, 怎么保证弹幕不会重合呢?

  3. xiaoyu说道:

    设置固定速度 弹幕会重叠 怎么处理

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*