jabbany / CommentCoreLibrary

Javascript Live Comment (Danmaku) Engine Implementation. JS弹幕模块核心,提供从基本骨架到高级弹幕的支持。
http://jabbany.github.io/CommentCoreLibrary/demo
MIT License
1.9k stars 304 forks source link

修改弹幕显示区域之后,已显示的弹幕的位置和速度都会发生变化。 #67

Closed sky0014 closed 7 years ago

sky0014 commented 7 years ago

我是直接修改width height来修改弹幕显示区域,然后发现已显示的弹幕的位置和速度都会发生变化。

请问是特意这么做的吗,好像与传统弹幕网站(AB站)的显示逻辑有点不同,他们已显示的弹幕不会变化,只影响新出现的弹幕。

sky0014 commented 7 years ago

后来从代码里翻出来应该使用setBounds方法来改变显示区域,不过问题还是同上。

jabbany commented 7 years ago

对,这是设计内的(或者说是设计的一个后果)。

CCL里面滚动弹幕的移动逻辑是通过指定一个“生存时间”,弹幕的位置根据弹幕消耗了多少生存时间决定。于是对于滚动弹幕,消耗了30%的生存时间的弹幕总会显示在70%的位置。如果运行中调整屏幕大小,那已有弹幕的位置和速度都会跟着变化。

实现这一部分位置公式的代码在 这里。如果想还原AB站的“弹幕不受控模式”,可以仿照这个类,把this.parent.width + this.width 部分换成另一个表达式就可以改变行为了(比如弹幕constructor里面记住建造时候的 parent.width 然后之后这个公式采用记住的值而不是去重新查询最新的值)。