# DanmakuFlameMaster **Repository Path**: hou-youjin/DanmakuFlameMaster ## Basic Information - **Project Name**: DanmakuFlameMaster - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 23 - **Created**: 2023-09-05 - **Last Updated**: 2024-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DanmakuFlameMaster ## 简介 > DanmakuFlameMaster是一款弹幕框架,支持发送纯文本弹幕、设置弹幕在屏幕的显示区域、控制弹幕播放状态等功能 ## 下载安装 ```` ohpm install @ohos/danmakuflamemaster ```` OpenHarmony ohpm环境配置等更多内容,请参考 [如何安装OpenHarmony ohpm包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md) ## 使用说明 ### 初始化:并设置弹幕显示相关属性 ``` this.model.setWidth(lpx2px(720)) this.model.setHeight(lpx2px(720)) let maxLinesPair: Map = new Map(); maxLinesPair.set(BaseDanmaku.TYPE_SCROLL_RL, 5); let overlappingEnablePair: Map = new Map(); overlappingEnablePair.set(BaseDanmaku.TYPE_SCROLL_RL, true); overlappingEnablePair.set(BaseDanmaku.TYPE_FIX_TOP, true); this.mContext = DanmakuContext.create(); this.mContext.setDanmakuStyle(DANMAKU_STYLE_STROKEN, 3) .setDuplicateMergingEnabled(false) .setScrollSpeedFactor(1.2) .setScaleTextSize(1.2) .setCacheStuffer(new SpannedCacheStuffer(), this.mCacheStufferAdapter) // 图文混排使用SpannedCacheStuffer .setMaximumLines(maxLinesPair) .preventOverlapping(overlappingEnablePair) .setDanmakuMargin(40); let that = this if (this.model != null) { this.mParser = this.createParser(); this.model.setCallback(new Call(that)); this.model.setOnDanmakuClickListener(new OnDanMu(that)) this.model.prepare(this.mParser, this.mContext); this.model.showFPS(true); } class Call implements Callback { private that: ESObject; constructor(that: ESObject) { this.that = that } public updateTimer(timer: DanmakuTimer): void { } public drawingFinished(): void { } public danmakuShown(danmaku: BaseDanmaku): void { } public prepared(): void { this.that.model.start(); } } class OnDanMu implements OnDanmakuClickListener { private that:ESObject; constructor(that :ESObject) { this.that = that } onDanmakuClick(danmakus: IDanmakus): boolean{ console.log('DFM onDanmakuClick: danmakus size:' + danmakus.size()) let latest: BaseDanmaku = danmakus.last() if (null != latest) { console.log('DFM onDanmakuClick: text of latest danmaku:' + latest.text) return true } return false }; onDanmakuLongClick(danmakus: IDanmakus): boolean{ return false }; onViewClick(view: IDanmakuView): boolean{ this.that.isVisible = true return false }; } ``` ### 添加弹幕 ``` let danmaku: BaseDanmaku = this.mContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL); danmaku.text = "这是一条弹幕" + SystemClock.uptimeMillis(); danmaku.padding = 5; danmaku.priority = 0; // 可能会被各种过滤器过滤并隐藏显示 danmaku.isLive = isLive.valueOf(); danmaku.setTime(this.model.getCurrentTime() + 1200); danmaku.textSize = 25 * (this.mParser.getDisplayer().getDensity() * 0.8); danmaku.textColor = 0xffff0000; danmaku.textShadowColor = 0xffffffff; danmaku.borderColor = 0xff00ff00; this.model.addDanmaku(danmaku); ``` ## 接口说明 ` model: DanmakuView.Model = new DanmakuView.Model()` 1. 添加弹幕 `model.addDanmaku(danmaku)` 2. 获取当前弹幕时间 `model.getCurrentTime()` 3. 隐藏弹幕显示 `model.hide()` 4. 弹幕显示 `model.show()` 5. 弹幕暂停播放 `model.pause()` 6. 弹幕继续播放 `model.resume()` 7. 设置弹幕显示区域宽度 `model.setWidth(lpx2px(1280))` 8. 设置弹幕显示区域高度 `model.setHeight(lpx2px(720))` 9. 启动弹幕播放 `model.prepare(this.mParser, this.mContext)` 10. 显示弹幕播放的fps `model.showFPS(true)` 11. 设置弹幕点击回调 `model.setOnDanmakuClickListener()` `DanmakuContext()` 1. DanmakuContext构造器 `public static create(): DanmakuContext` 2. 获取弹幕排序器 `public getBaseComparator(): BaseComparator` 3. 设置弹幕排序器 `public setBaseComparator(baseComparator: BaseComparator)` 4. 获取弹幕显示器 `public getDisplayer(): AbsDisplayer` 5. 设置字体样式 `public setTypeface(font: string): DanmakuContext` 6. 设置弹幕透明度 `public setDanmakuTransparency(p: number): DanmakuContext` 7. 设置缩放字体大小 `public setScaleTextSize(p: number): DanmakuContext` 8. 设置弹幕显示外边距 `public setDanmakuMargin(m: number): DanmakuContext` 9. 设置弹幕显示上边距 `public setMarginTop(m: number): DanmakuContext` 10. 获取是否显示顶部弹幕 `public getFTDanmakuVisibility(): boolean` 11. 设置是否显示底部弹幕 `public setFBDanmakuVisibility(visible: boolean): DanmakuContext` 12. 获取是否显示左右滚动弹幕 `public getL2RDanmakuVisibility(): boolean` 13. 设置是否显示左右滚动弹幕 `public setL2RDanmakuVisibility(visible: boolean): DanmakuContext` 14. 获取是否显示右左滚动弹幕 `public getR2LDanmakuVisibility(): boolean` 15. 设置是否显示右左滚动弹幕 `public setR2LDanmakuVisibility(visible: boolean): DanmakuContext` 16. 获取是否显示特殊弹幕 `public getSpecialDanmakuVisibility(): boolean` 17. 设置是否显示特殊弹幕 `public setSpecialDanmakuVisibility(visible: boolean): DanmakuContext` 18. 设置同屏弹幕密度,-1自动 0无限制 `public setMaximumVisibleSizeInScreen(maxSize: number): DanmakuContext` 19. 设置描边样式 `public setDanmakuStyle(style: number, ...values: number[]): DanmakuContext` 20. 设置弹幕是否粗体显示 `public setDanmakuBold(bold: boolean): DanmakuContext` 21. 设置色彩过滤弹幕白名单 `public setColorValueWhiteList(colors: number[]): DanmakuContext` 22. 获取色彩过滤弹幕白名单 `public getColorValueWhiteList(): number[]` 23. 设置屏蔽特定用户的弹幕 ` public setUserHashBlackList(hashes: string[]): DanmakuContext` 24. 移除黑名单的用户 `public removeUserHashBlackList(hashes: string[]): DanmakuContext` 25. 增加黑名单的用户 `public addUserHashBlackList(hashes: string[]): DanmakuContext` 26. 获取黑名单用户 `public getUserHashBlackList(): string[]` 27. 是否屏蔽游客弹幕 `public blockGuestDanmaku(block: boolean): DanmakuContext` 28. 设置滚动弹幕速率 `public setScrollSpeedFactor(p: number): DanmakuContext` 29. 设置是否启用合并重复弹幕 `public setDuplicateMergingEnabled(enable: boolean): DanmakuContext` 30. 获取是否启用合并重复弹幕 `public isDuplicateMergingEnabled(): boolean` 31. 设置底部是否可以有弹幕 `public alignBottom(enable: boolean): DanmakuContext` 32. 获取底部是否可以有弹幕的状态 `public isAlignBottom(): boolean` 33. 设置最大弹幕显示行数 `public setMaximumLines(pairs: Map): DanmakuContext` 34. 设置防止弹幕重叠 `public setOverlapping(pairs: Map): DanmakuContext` 35. 获取是否有最大行数限制 ` public isMaxLinesLimited(): boolean` 36. 获取是否开启防止弹幕重叠功能 ` public isPreventOverlappingEnabled(): boolean` 37. 设置弹幕同步器 `public setDanmakuSync(danmakuSync: AbsDanmakuSync): DanmakuContext` 38. 设置弹幕缓存填充器 `public setCacheStuffer(cacheStuffer: BaseCacheStuffer, cacheStufferAdapter: Proxy): DanmakuContext` 39. 设置配置信息改变回调接口 `public registerConfigChangedCallback(listener: ConfigChangedCallback): void` 40. 取消配置信息改变回调接口 `public unregisterConfigChangedCallback(listener: ConfigChangedCallback): void` 41. 设置弹幕过滤器 `public registerFilter(filter: BaseDanmakuFilter): DanmakuContext` 42. 取消弹幕过滤器 `public unregisterFilter(filter: BaseDanmakuFilter): DanmakuContext` 43. 重置DanmakuContext `public resetContext(): DanmakuContext` `Proxy()` 1. 预绘制缓存弹幕 `public abstract prepareDrawing(danmaku: BaseDanmaku, fromWorkerThread: boolean)` 2. 释放弹幕资源 `public abstract releaseResource(danmaku: BaseDanmaku)` `DanmakuTimer()` 1. 更新定时器时间 `public update(curr: number): number` 2. 增加计时的时间 `public add(mills: number): number` 3. 获取距离计时结束剩余的时间 ` public getLastInterval(): number` `Duration()` 1. 设置弹幕初始持续时间 `public setValue(initialDuration: number)` 2. 设置弹幕初始持续时间系数 `public setFactor(f: number)` `SpecialDanmaku()` 1. 获取顶部固定弹幕的左边距 `public getLeft(): number` 2. 获取顶部固定弹幕的上边距 `public getTop(): number` 3. 获取顶部固定弹幕的右边距 `public getRight(): number` 4. 获取顶部固定弹幕的下边距 `public getBottom(): number` 5. 获取弹幕的类型 `public getType(): number` 6. 设置特效弹幕平移数据 `public setTranslationData(beginX: number, beginY: number, endX: number, endY: number, translationDuration: number, translationStartDelay: number)` 7. 设置特效弹幕透明度变化数据 `public setAlphaData(beginAlpha: number, endAlpha: number, alphaDuration: number)` `DanmakuUtils()` 1. 比较两个弹幕是否相同 `public static compare(obj1: BaseDanmaku, obj2: BaseDanmaku): number` 2. 弹幕是否重复 `public static isDuplicate(obj1: BaseDanmaku, obj2: BaseDanmaku): boolean` 3. 创建弹幕工厂 `public static create(): DanmakuFactory` ## 约束与限制 在下述版本验证通过: - DevEco Studio 版本: 4.1 Canary(4.1.3.317),OpenHarmony SDK:API11 (4.1.0.36)。 ## 目录结构 ```` |---- DanmakuFlameMaster | |---- entry # 示例代码文件夹 | |---- library # DanmakuFlameMaster库文件夹 | |---- src\main\ets\components\common\master\flame\danmaku # 源代码文件夹 | |---- control # 弹幕状态控制实现 | |---- danmaku # 弹幕基础类库 | |---- ui # 弹幕自定义显示控件 | |---- index.ets # 对外接口 | |---- README.md # 安装使用方法 ```` ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/openharmony-sig/DanmakuFlameMaster/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://gitee.com/openharmony-sig/DanmakuFlameMaster/pulls) 。 ## 开源协议 本项目基于 [Apache License 2.0](https://gitee.com/openharmony-sig/DanmakuFlameMaster/blob/master/LICENSE) ,请自由地享受和参与开源。