前端js實現彈幕,怎麼控制彈幕不重疊,有什麼思路嗎

時間 2021-05-05 23:37:32

1樓:和聲伴奏

去年閒著沒事寫了乙個

線上預覽:https://

2樓:段王爺

以我淺薄的見識,發表下想法。

隨機是不可能隨機的,這輩子都不可能隨機的。

軌道劃分是必須的,但是單個軌道的位置可以上下浮動,這個可以做乙個隨機,假設軌道寬度的10%。

字幕的寬度canvas可以直接計算,文字寬度。

假定每一幀最多隻增加一條字幕,那麼就可以用乙個字段儲存下乙個插入字幕的軌道的編號,具體是哪個軌道,實時計算即可。

每條字幕,儲存若干屬性,比如:速度、顏色、長度,位置。

每一幀計算,當字幕的尾部離開了畫布,移除佇列。

重點在於,如何確定下乙個可插入字幕的軌道編號。

每條軌道需要儲存乙個值,就是當前軌道內容的位置,既最後一條字幕的尾巴的位置,通過比較可以得到最小值,最小的那個軌道就是可以插入的軌道。

然後需要防止字幕撞車。

山頂速度的時候,需要做乙個限定,兩條字幕的距離決定了後面的字幕的最大速度。

over!

3樓:Gitee

開源中國社群今年愚人節時恰好也用了彈幕效果:

放上體驗位址和原始碼,題主可以感受一下~

oschina.gitee.io/osc-bullet/

原始碼:https://

4樓:哈哈0.0

先來個簡單版本的:

怎麼控制不重疊,用文件流啊。

怎麼選軌道,定乙個寬度,從第一條軌道開始,沒塞滿就繼續往裡塞,這樣的話,螢幕上不是會突然多一條彈幕嗎,那就先塞滿再往裡塞。

然後你們就這樣排好隊,讓我一拳一拳的錘扁,然後再拎出來。

好了下面詳細講解一下:

為了讓彈幕不重疊最簡單的方法就是放在文件流中,這樣他就會按內容撐開了,自然不會重疊,

當有新彈幕過來的時候,我們找到沒放滿的軌道放進去就好了,但是這個時候軌道的長度不一定剛好就是螢幕的寬度(肯定是小於的),直接放進去就會到螢幕裡面了,就會很突兀。解決方案就是放個空標籤將它佔滿,然後再接著放彈幕。

如果所有軌道都滿了,那麼我們可以先不往裡面放,等下乙個迴圈。當然你也可以多寫邏輯去放最短的。

5樓:open-node

要計算每條彈幕的長度(寬度) ,這個在canvas裡是可以做到的。所以,你的方案加上每條彈幕寬度的計算就完美了。資料視覺化裡的詞云也是這麼做的。那個方案更複雜。

6樓:Rix Tox

基本的思路是,按照出現的時間順序給彈幕分配 Y 軸空間。在當前彈幕準備出現,正要新增到螢幕時,遍歷目前已經在螢幕上的彈幕,對螢幕的 Y 軸區域進行分析:如果螢幕上的一條彈幕和當前彈幕在 X 軸上會相撞,就減掉這條彈幕在螢幕上占用的 Y 軸區域。

遍歷完後剩下的 Y 軸區域都是能夠安全放置當前彈幕而不會衝突的,這時選擇最小的能滿足當前彈幕高度的 Y 軸範圍即可。

具體程式碼參考我曾經做過的彈幕專案:https://github.

7樓:玉哥哥

這個是我實現的不重疊彈幕庫,效能也很好,在canvas裡邊可以獲取文字的寬度,及到螢幕左邊的距離,可以很精準的控制每條軌道輸出下條彈幕的時機及銷毀的時機。

sailiy.github.io/

8樓:鴨Eeeeeer喲

首先要看你是否要求不同長度的彈幕速度不同,如果都是勻速的話應該就比較簡單了吧

如果速度不同可能就要複雜一點,比如需要按照長度來隨機分配,長的後跟短的,保證每個彈幕在螢幕內滯留時間相等即可

9樓:時光流逝

如果速度相同的話不會存在重疊這種情況,只需要隨機取一條軌道push即可,當然要保持乙個最小push間距(或者叫最小push時間)

10樓:伊撒爾

瀉藥。唔目前來說,我之前在c站的版本是計算加速度,就是當兩個彈幕要追上的時候,後者減速到同樣速度,這樣就永遠追不上

所以你會發現,如果彈幕足夠多,那最終會變成滿屏都是勻速啦以上,供參考。

11樓:羅茜

瀑布流布局

利用js生成有序的彈幕清單,按列分組,分成N多組彈幕,然後利用CSS做瀑布流布局即可。

行插入方法

比如,我們彈幕分為十行展示,那麼,假設他們是10個p標籤,我們需要做的就是往每乙個P標籤裡面分別插入乙個span標籤,然後利用CSS設定p標籤之間的間距,以及span標籤之間的間距,就可以控制彈幕不重疊啦

B站的不擋臉彈幕是怎麼實現的?

Feynman 不清楚B站是如何操作的,但目前能想到的一種方法就是semantic segmentation 語義分割 簡單來說實現不擋臉字幕需要兩步 對,比把大象裝冰箱還少一步,笑 通過semantic segmentation獲取人在影象中的位置。通過人在影象中的位置遮蔽相同位置的彈幕。詳細解釋...

院線電影有沒有可能實現彈幕功能?

娛小泛 早在2013年的時候,就有影院做過彈幕的觀影活動了,而且還有專門的操作公司,但當時多是以此為影片噱頭,用於營銷,最終目的還是要提公升票房。因為實際影院做彈幕會存在兩個主要問題 破壞影院原本具備的沉浸式體驗 破壞發彈幕使用者的私密感,應該不會有人希望在懟人的時候,被懟人在現場 南洋浪客 你們覺...

彈幕遊戲的碰撞檢測一般是怎麼實現的?

施展 上個月正好在公司花兩天做了個彈幕遊戲的demo。彈幕碰撞主要是將敵人和自己的子彈區分開,分別存入兩個網格物件中。網格物件持有乙個二維陣列 當然一維陣列也可以 陣列的長度為 螢幕長度 單個網格的長度 螢幕高度 單個網格的高度 效果如下圖 陣列用於存放處在該網格中的所有子彈。假設螢幕為480 80...