Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

滚动弹幕排版的问题 #35

Open
Catofes opened this issue Aug 15, 2014 · 8 comments
Open

滚动弹幕排版的问题 #35

Catofes opened this issue Aug 15, 2014 · 8 comments

Comments

@Catofes
Copy link
Contributor

Catofes commented Aug 15, 2014

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
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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

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

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

理解不能了

@Catofes
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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

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;
};  

应该可以满足要求。

@jabbany
Copy link
Owner

jabbany commented Aug 15, 2014

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

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

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

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

@Catofes
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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
#35 (comment)
.

@jabbany jabbany added this to the 规范化项目的接口和文档 milestone Aug 15, 2014
@Catofes
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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

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

@Catofes
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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

@Catofes
Copy link
Contributor Author

Catofes commented Aug 15, 2014

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

@jabbany
Copy link
Owner

jabbany commented Aug 16, 2014

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants