CommentCoreLibrary icon indicating copy to clipboard operation
CommentCoreLibrary copied to clipboard

滚动弹幕排版的问题

Open Catofes opened this issue 10 years ago • 8 comments

2014-08-15 09 58 50

如图所示的两条弹幕(test 6)。

弹幕池中编号为2的弹幕是 迷之感动。 编号为14的是谢谢。不过迷之感动后面有大量的空白而谢谢则排版到了下方。这一点满不舒服。尤其是在屏幕很大的时候可能会出现阶梯状。

看代码应该是在vCheck里 选中的那一行。 逻辑是当之前的一条弹幕滚出屏幕时这条弹幕不能超过屏幕中间。debug看到 2弹幕滚出时间位7560。 14弹幕滚到中间时间为7080。所以被没有排在2好弹幕的正后方。

我想问这样处理合适吗? 不是应该只要避免不必要的堆叠就好了?

所以这个地方的逻辑是不是应该改为。当先前弹幕完全滚出屏幕的时候,本弹幕的头部没有道道屏幕边缘嘛?

也就是

this.getMiddle = function(cmt){
    return cmt.stime+this.width/(cmt.width+this.width)*cmt.ttl;
}

Catofes avatar Aug 15 '14 02:08 Catofes

啊不对。。。ttl理解有问题。

那原来的逻辑更没搞清楚了。。。

this.getEnd(cmt)给出的时刻是2号弹幕出现的时刻+2号弹幕现在余下的存活时间=这是啥时刻? this.getMiddle(cmt)给出的是14号弹幕正好滚动在屏幕中间的时刻?

理解不能了

Catofes avatar Aug 15 '14 02:08 Catofes

如果要求弹幕没有重叠的话这样应该可以:

this.getEnd  = function(cmt){
    return cmt.stime + cmt.dur;
};  
this.getMiddle = function(cmt){
    return cmt.stime + this.width/(cmt.width+this.width)*cmt.dur;
};  

如果要求重叠只出现在左侧屏幕,那么

this.getEnd  = function(cmt){
    return cmt.stime + cmt.dur/2;
};  
this.getMiddle = function(cmt){
    return cmt.stime + this.width/(cmt.width+this.width)*cmt.dur/2;
};  

应该可以满足要求。

Catofes avatar Aug 15 '14 02:08 Catofes

你可以看看新的 dev-modularize 分支下,对 CommentSpaceAllocator和Comment对象进行了重构(只需要两种规划器和两种弹幕了),方便以后扩展和改变规划方案。等这个分支成熟了master就会迁移过去。

里面现在采取的是一个叫 willCollide 的函数判断两个弹幕是否有冲撞(目前方法还是于原版一致,但是扩展就变得很容易)。

空间规划组件是最早的组件之一。当初的考虑,一是尊存Mukio播放器的策略,二是空间规划器里面尽量减少对width啦之类的读取。后来宽度被缓存了效率就好一些了。

不过不知道什么奇怪的问题,我觉得 dev-modularize 分支下的实现应该和原版一样排版,可是现在排版不如原版密集,所以感觉还有一些BUG,但是还没完全调通。你有空可以帮着测试一下。

jabbany avatar Aug 15 '14 04:08 jabbany

233 好多分支 On Aug 15, 2014 12:02 PM, "Jim Chen" [email protected] wrote:

你可以看看新的 dev-modularize 分支下,对 CommentSpaceAllocator和Comment对象进行了重构(只需要两种规划器和两种弹幕了),方便以后扩展和改变规划方案。等这个分支成熟了master就会迁移过去。

里面现在采取的是一个叫 willCollide 的函数判断两个弹幕是否有冲撞(目前方法还是于原版一致,但是扩展就变得很容易)。

空间规划组件是最早的组件之一。当初的考虑,一是尊存Mukio播放器的策略,二是空间规划器里面尽量减少对width啦之类的读取。后来宽度被缓存了效率就好一些了。

不过不知道什么奇怪的问题,我觉得 dev-modularize 分支下的实现应该和原版一样排版,可是现在排版不如原版密集,所以感觉还有一些BUG,但是还没完全调通。你有空可以帮着测试一下。

— Reply to this email directly or view it on GitHub https://github.com/jabbany/CommentCoreLibrary/issues/35#issuecomment-52272492 .

Catofes avatar Aug 15 '14 04:08 Catofes

没找到文件在哪。是 dev-modularize 的 src/core/ 的两个ts文件嘛?

是的话。。。这个用啥做的动画? css?

Catofes avatar Aug 15 '14 05:08 Catofes

啊 变化好大。。。。 现在应该还不能用? Animate函数没有实现?

Catofes avatar Aug 15 '14 05:08 Catofes

还有,新版本采用canvas不?
我这边个人一直使用设canvas看新番,感觉没有遇到什么问题。

Catofes avatar Aug 15 '14 05:08 Catofes

嗯。新版有采取Canvas的可能性,目前未来设想是一些弹幕(比如普权滚动)走Canvas,高级弹幕或者字幕池的滚动之类的依然走 DOM 力争还原度。

马上要推一个支持 animate 函数的(顺带就能或多或少的重新支持B站定位/定位移动弹幕)。有了这个抽象化还很好支持A站的高级移动轨迹和B站的轨迹弹幕。

jabbany avatar Aug 16 '14 13:08 jabbany