BarrageRenderer
BarrageRenderer copied to clipboard
关于弹幕重叠的问题
单单靠已经显示的数量还是不足以解决重叠的问题 因为同样的显示面积, 可以容纳size小的弹幕多, 但可以容纳 size 小的弹幕少(如弹幕字数多少就决定了 size 的大小) 所以能否增加弹幕的生命周期方法: 1.弹幕开始显示 2.弹幕完全显示 3.弹幕开始消失 4.弹幕完全消失
这样更能完善限流
/// 弹幕生命周期行为,实验特性; 可试用, 亦可以通过继承 BarrageRenderer 来实现相同功能
- (void)barrageRenderer:(BarrageRenderer *)renderer spriteStage:(BarrageSpriteStage)stage spriteParams:(NSDictionary *)params;
目前已有了 进入、消失 两个时间点的回调。其他时间点似乎用处不大。
怎么解决弹幕重叠问题?
弹幕重叠该如何解决
弹幕重叠问题,我想了一个解决办法:在计算弹幕起始位置的时候,如果没有位置放的时候,不要强制去放,这样就可以避免重叠的问题。
具体看BarrageWalkSprite的originInBounds方法中的如下代码:
if (availableFrom > stripNum - overlandStripNum) { // 那就是没有找到喽 if (self.forceDraw) { availableFrom = AVAERAGE_STRATEGY?leastActiveSpriteStrip:leastActiveTimeStrip; // 使用最小个数 or 使用最短时间 } else { //当在屏幕上没有找到能放的位置时,我们返回CGPointZero,就先不放了,等有合适的位置再放 return CGPointZero; } }
实际效果看,搜狐影音mac版的弹幕
self.forceDraw
请问一下这里的forceDraw 参数是哪里来的参数 @ZhongyiLi88
我做了一个修改版本尝试解决弹幕重叠的问题: https://github.com/dourgulf/BarrageRenderer
认真想了一下,应该另外定义一个Walk对象来实现这个特性。 同时,整体框架上引入一个是否可以加入新的弹幕的接口,这样既可以保留现有的特性,有可以支持到新的特性。