前端演算法之彈幕設計

2021-09-24 06:29:20 字數 1032 閱讀 6696

大家都說前端寫頁面較多,幾乎用不到演算法。本文願從彈幕設計這個場景來描述演算法在前端中的應用,我們先來看下實現效果:

圖1.1 彈幕效果

開場之前我們先來描述彈幕開發的難度,再集中精力描述演算法設計的思路。

如何保證不同字型大小的彈幕不碰撞

彈幕的位置計算

只有設計好彈幕的初始位置,才可以動態、高效的管理不同字型大小彈幕的碰撞問題。打個比方,我們通過介面獲取了2秒之內的彈幕資料1000條,每個字幕的長度、速度、字型大小都不同,怎麼管理這些彈幕,示意圖如下:

圖2.1 彈幕管理示意圖

這是第一種情況,按照從上到啊的順序依次擺放以後會有幾個問題:

彈幕五、六、七該怎麼計算位置,按top值迴圈取模+累加嗎?

當彈幕一或者彈幕三足夠長的時候,如何準時的跳過當前位置計算?

空出的位置是否滿足當前彈幕的高度

……首都國際機場一共有3條跑道,兩條4e級跑道、一條4f級跑道,2023年的吞吐量為9000萬人次。它的執行機制就是所有飛機通過搭台有順序的共用3條跑道來完成運輸任務的。

同理,我們也設計了幾個個角色:乙個是軌道(跑道)、乙個是排程(塔台)、乙個是彈幕(飛機),我們為每個角色設計乙個類分為為track、main、bullet。

圖2.2 軌道計算示意圖

其次我們來回憶下機場的工作流程:

機長呼叫塔台,cz6132請求起飛

目前跑道 a1 空閒,准許進入

塔台檢視跑道使用情況

進入跑道,起飛完成

機長通知塔台,本次起飛完成,釋放跑道的占用

其他飛機同樣執行上述步驟

按照這個思路,我們的彈幕工作流程:

有 其他彈幕同樣執行上述步驟

圖2.3 軌道可用性計算示意圖

關於軌道的基本原理我們整理清楚了,當然還有不少細節比如如何和排程通訊、如何和彈幕通訊以及虛擬軌道檢測演算法等。有興趣的同學可以參考**吧。

彈幕佇列控制

自身狀態更新

資料格式轉換

動畫執行 還是直接用流程圖來描述更直接些:

前端演算法之彈幕設計

大家都說前端寫頁面較多,幾乎用不到演算法。本文願從彈幕設計這個場景來描述演算法在前端中的應用,我們先來看下實現效果 開場之前我們先來描述彈幕開發的難度,再集中精力描述演算法設計的思路。如何保證不同字型大小的彈幕不碰撞 彈幕的位置計算 只有設計好彈幕的初始位置,才可以動態 高效的管理不同字型大小彈幕的...

彈幕的實現(純前端)

一 前言 今天瀏覽某 看到乙個活動頁有內嵌的彈幕模組 圖一 但是看到移動的彈幕重疊很多,不忍直視啊。突然想起很久之前自己寫寫過類似的彈幕,就翻出來看了一下,呵,也是不忍直視的,最後再附上當年的效果以及 二 大話幾點 5 彈幕的後台實現可以通過websocket實現,當然也可以借助node實現。當使用...

前端實現迴圈彈幕效果

這裡給的margin right是為了給彈幕乙個隨機的間距,這樣顯得比較隨機 js 獲取螢幕寬度,在呼叫test的方法時候,彈幕先從最右邊螢幕出來,如果不給box重置padding left,那彈幕每次都在螢幕的最左邊,無法實現效果,我剛開始把padding left放在標籤上了,後來樣式被重置,無...