CommentCoreLibrary的三重过滤器

马上就要考试了,所以趁着考试前,先把CCL的最新改良介绍一下。CommentCoreLibrary的宗旨是采用HTML + JS来实现复杂的弹幕效果和比Flash版本灵活许多倍的过滤器和效果库,于是这次的技术更新更是加强了这一点的优势,让大家有机会见识到可能的下一代过滤器效果。

CommentCoreLibrary目前的过滤器共有三重,分别为“规则过滤器”,“函数预处理器”和“行进间修正器”。

第一重过滤器 规则过滤器

规则过滤器是一个基于简单语法规则的弹幕过滤器,设计宗旨是能让观看者简单定义过滤器规则又能发挥强大的智能过滤效果。与传统的正则表达式过滤器相区别的是,规则过滤器提供的可扩展性语法更加强悍匹配对象。

规则过滤器采用一套近似编程判断式的语法,但是规则及其简单:[对象.属性] [操作符] [内容]

对象是一个能简单表达过滤器过滤对象的特征字符,比如 $ 表示“滚动弹幕”,即弹幕类型 1,2 ,而 B表示底部弹幕,P表示定位弹幕等等。属性是弹幕对象的原始属性的内部表达,比如 text 是弹幕内容文字,color是弹幕颜色,size是弹幕大小等等。操作符是一种用于进行判断的符号,比如 == 表示相同于…时过滤, ~ 表示匹配正则表达式…则过滤,range 表示数字在某范围内则过滤等等。内容则是符合对象相应属性下的可被操作符操作的一个样本。

第二重过滤器 函数预处理器

函数预处理器,是在应用CCL时候通过页面写入的(或许也可动态载入),它是在JavaScript下定义的一个或一组函数,在弹幕被展示到荧幕之前,所有弹幕的原始数据都会经过预处理器。预处理器与过滤器不同之处在于,预处理器不但能阻挡弹幕,还可以通过改变弹幕的属性而对弹幕“预处理”后再放出。

比如下面的代码会让所有的弹幕变成白色,小号滚动弹幕:

cm.filter.addModifier(function(cmt){
    cmt.size = 16;
    cmt.color = '#ffffff';
    cmt.mode = 1;
    return cmt;
});

 


很酷吧,我们还能叠加一些弹幕的属性,呈现出更加奇特的效果。当然这都由你来发挥。

第三重过滤器 行进间修正器

行进间修正器是最后一重过滤设计,它是一个单一函数,用于处理弹幕生命过程中的一切重新定位效果。它在每条弹幕的每次运动触发器触发,并且可以最大限度的进行弹幕的行进间设定,有了这个修正器,我们可以实现非常奇葩的弹幕修正效果。

举下自带fefx库里面的两个例子:

可以看到,中间的滚动弹幕透明度很高,而两端的弹幕则相对清晰

弹幕中央隐藏: 有些人可能不是很适应弹幕播放器的文字在视频上方划过而阻挡下面的视频内容,当然,你可以通过设定透明度来解决一部分问题,不过这里有一个更好的方式——载入弹幕中央隐藏修正器。

弹幕中央隐藏行进间修补的实现模式如下:检测弹幕类型 mode == 1 || mode == 2 ,计算一下位置 pos = ttl/dur(生存剩余时间/生命周期),计算透明度(pos > 30% && pos < 70% : opacity = 0.2 else : opacity = 超出的比例 * 0.8 + 0.2)。

弹幕飘过中部的时候加速通过

弹幕中央加速:同样也是为了降低弹幕的阻挡时间,弹幕中央加速用于在弹幕移动到中部位置的时候,加快其行进速度,从而降低阻挡画面的时间。和前面的实现相似,本过滤器采用缩短弹幕生命剩余时长的方式让弹幕快速通过。

其他

当然,除了这些改进之外,CCL还增加了一些稳定性和兼容性的改进,比如在Chrome和Firefox下可以统一弹幕中的“换行” 等。有兴趣可以继续关注  https://github.com/jabbany/CommentCoreLibrary或者 到: http://tools.kanoha.org/experimental/CommentCore 进行体验!

4 Comments

发表评论

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