效果
显示大量弹幕、允许重叠、弹幕字号允许不同
约定
为了更好地进行讨论,我们先声明一些共识:
-
弹幕会从屏幕右边缘发射,并向左滚动
-
弹幕出现位置应该尽量靠上
-
几条弹幕之间应该尽量不要重叠,如果要重叠也要尽量重叠长度少一些
此外本文会创造/使用一些概念:
-
弹幕:计算的对象实体,有以下成员:
- 发射时间:这个实际上决定了某时刻弹幕的x坐标
- 坐标:只有y坐标,是算法最后计算出应该出现的位置
- 宽度:根据弹幕字数、字号计算出的长度
- 高度:由弹幕的字号决定
-
屏幕右边缘:由于弹幕是从右边出现的,所以右边缘和屏幕宽度都很重要
-
屏幕宽度:由窗口大小决定
-
位置(room),可以放置弹幕的空位,由于只需要关注屏幕右边缘线上的空位,所以位置实际上是一个一维变量,并且屏幕边缘上所有的位置合起来是一个一维数组,有以下成员:
- 高度:位置的高度
- 坐标:位置的坐标,实际上不是一个字段,而是由前面所有的位置高度综合算出的
- 上条弹幕:这个位置最近发射的弹幕
-
停留时间:弹幕在屏幕上停留的时间
2024年1月25日大约 6 分钟