1 Star 9 Fork 1

Voidmatrix / DanmuGame

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

logo

DanmuGame

Bilibili 直播间弹幕控制游戏快速开发框架

本项目基于 bilibili-live-ws 开发,在此特别感谢为本项目开拓道路的大佬们 ~

程序结构及流程

程序结构及流程

项目依赖项

DanmuUtil 直播间监听程序依赖于 bilibili-live-ws 等库,可以直接通过 npm install 安装相关依赖;在 Release 版本中,DanmuUtil 程序已打包为 .exe 形式,方便无 Node.js 环境的设备开箱即用。

DanmuGame 游戏框架和 VisualDebugTool 调试器项目提供了基于 VisualStudio 2019 的 x64 版本项目工程,可以直接拉取到本地进行编译,如需在其他编译器环境或其他平台下编译,请先编译并配置如下依赖库:

库名称 网址 协议
Lua - 5.4.0 http://www.lua.org/ MIT
SDL - 2.0.14 https://www.libsdl.org/ zlib license
SDL_image - 2.0.5 https://www.libsdl.org/projects/SDL_image/ zlib license
SDL_gfx - 1.0.4 https://sourceforge.net/projects/sdlgfx/ zlib/libpng license
SDL_mixer - 2.0.4 https://www.libsdl.org/projects/SDL_mixer/ zlib license
SDL_ttf - 2.0.15 https://www.libsdl.org/projects/SDL_ttf/ zlib license
cpp-httplib - 0.8.4 https://github.com/yhirose/cpp-httplib/ MIT
cJSON - 1.7.14 https://github.com/DaveGamble/cJSON/ MIT
imgui - 1.86 https://github.com/ocornut/imgui/ MIT

快速上手

发布版本中提供了开箱即用的程序,首先在 config.json 中配置好直播间信息及游戏设置(详细配置内容见稍后描述),然后启动 DanmuUtil 程序,当程序显示如下内容时证明启动并连接成功: 屏幕截图

接下来启动 DanmuGame.exe,程序将自动加载并执行 GameScript.lua 中的脚本内容,调整直播画面到游戏窗口即可。

配置文件 Config.json 详解

  • room:需要监听的直播间房间号(完整房间号,非短房间号)
  • port:DanmuUtil 程序和 DanmuGame 游戏框架在本地通信的端口号
  • window-title:游戏窗口标题文本
  • window-size:游戏窗口尺寸
    • width:游戏窗口宽度(单位:像素)
    • height:游戏窗口高度(单位:像素)
  • full-screen:游戏窗口全屏(将覆盖游戏窗口尺寸设置)
  • max-fps:游戏最高帧率,设置过大的最高帧率可能导致实际帧率不稳定(建议区间:60 ~ 144)
  • linear-filtering:对游戏画面开启线性过滤抗锯齿(某些需要对图片素材缩放的像素风游戏可能不适合开启)

游戏脚本编写及 API 详解

GameScript.lua 将作为游戏逻辑的入口脚本进行加载运行,使用 Lua 5.4 语法编写,请确保已在脚本环境中声明 __EventHandler 函数和 __MainUpdate 函数,这两个函数会分别在 直播间事件更新(如弹幕发送)和 游戏画面帧更新 时被调用:

  • 对于函数 __EventHandler(event, data),第一个参数 event 是代表当前事件类型的字符串,第二个参数包含了事件相关数据,可能的值如下:
    事件 数据
    "ENTER" 观众进入房间 data.username 观众昵称
    "MESSAGE" 观众发送弹幕 data.username 观众昵称
    data.message 弹幕内容
  • 对于函数 __MainUpdate(),程序会在每次尝试刷新游戏画面时调用此函数,可以在函数内编写游戏画面渲染相关的逻辑;

🕹 游戏控制相关 API

QuitGame()

  • 功能: 退出游戏
  • 参数简介:
  • 返回值简介:
🖥 游戏窗口相关 API

SetTitle(title)

  • 功能: 设置窗口标题
  • 参数简介:
    参数 类型 简介
    title string 窗口标题
  • 返回值简介:

title = GetTitle()

  • 功能: 获取窗口标题
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    title string 窗口标题

width, height = GetWindowSize()

  • 功能: 获取窗口尺寸
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    width number 窗口宽度(单位:像素)
    height number 窗口高度(单位:像素)
🖼 游戏画面相关 API

SetDrawColor(color)

  • 功能: 设置绘图颜色
  • 参数简介:
    参数 类型 简介
    color table 绘图颜色
  • 返回值简介:

color = GetDrawColor()

  • 功能: 设置绘图颜色
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    color table 绘图颜色

DrawPoint(point)

  • 功能: 绘制像素点
  • 参数简介:
    参数 类型 简介
    point table 点坐标
  • 返回值简介:

DrawLine(begin, end)

  • 功能: 绘制线段
  • 参数简介:
    参数 类型 简介
    begin table 起始点坐标
    end table 结束点坐标
  • 返回值简介:

DrawRectangle(rect, fill)

  • 功能: 绘制矩形
  • 参数简介:
    参数 类型 简介
    rect table 矩形坐标和尺寸
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawRoundRectangle(rect, radius, fill)

  • 功能: 绘制圆角矩形
  • 参数简介:
    参数 类型 简介
    rect table 矩形坐标和尺寸
    radius number 圆角所在圆的半径
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawCircle(center, radius, fill)

  • 功能: 绘制圆形
  • 参数简介:
    参数 类型 简介
    center table 圆心坐标
    radius number 圆半径
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawEllipse(center, radius_x, radius_y, fill)

  • 功能: 绘制椭圆形
  • 参数简介:
    参数 类型 简介
    center table 椭圆中心坐标
    radius_x number 椭圆 X 方向半径
    radius_y number 椭圆 Y 方向半径
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawPie(center, radius, start, end, fill)

  • 功能: 绘制扇形
  • 参数简介:
    参数 类型 简介
    center table 扇形所在圆的圆心坐标
    radius number 扇形所在圆的半径
    start number 起始角度,逆时针为正方向
    end number 结束角度,逆时针为正方向
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawTriangle(point_1, point_2, point_3, fill)

  • 功能: 绘制三角形
  • 参数简介:
    参数 类型 简介
    point_1 table 三角形第一个顶点坐标
    point_2 table 三角形第二个顶点坐标
    point_3 table 三角形第三个顶点坐标
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawPolygon(point_list, fill)

  • 功能: 绘制多边形(凸多边形)
  • 参数简介:
    参数 类型 简介
    point_list table 多边形顶点坐标构成的数组
    fill boolean 是否填充,默认为 false
  • 返回值简介:

DrawBezier(point_list, steps)

  • 功能: 绘制贝塞尔曲线
  • 参数简介:
    参数 类型 简介
    point_list table 多边形顶点坐标构成的数组
    steps number 插值步数
  • 返回值简介:

sprite = LoadSprite(path)

  • 功能: 加载贴图
  • 参数简介:
    参数 类型 简介
    path string 贴图文件路径
  • 返回值简介:
    返回值 类型 简介
    sprite userdata/nil 加载成功返回贴图数据,失败返回 nil

SetSpriteAlpha(sprite, alpha)

  • 功能: 设置贴图透明度
  • 参数简介:
    参数 类型 简介
    sprite userdata 贴图数据
    alpha number 贴图透明度,取值范围为 0 ~ 255
  • 返回值简介:

width, height = GetSpriteSize(sprite)

  • 功能: 获取贴图尺寸
  • 参数简介:
    参数 类型 简介
    sprite userdata 贴图数据
  • 返回值简介:
    返回值 类型 简介
    width number 贴图宽度,单位:像素
    height number 贴图高度,单位:像素

RenderSprite(sprite, rect_show, rect_clip)

  • 功能: 渲染贴图
  • 参数简介:
    参数 类型 简介
    sprite userdata 贴图数据
    rect_show table 贴图显示区域的坐标和尺寸
    rect_clip table 贴图裁剪区域的坐标和尺寸,默认为完整贴图部分
  • 返回值简介:

RenderSpriteEx(sprite, rect_show, rect_clip, center, angle, mode)

  • 功能: 使用高级模式渲染贴图
  • 参数简介:
    参数 类型 简介
    sprite userdata 贴图数据
    rect_show table 贴图显示区域的坐标和尺寸
    rect_clip table 贴图裁剪区域的坐标和尺寸,默认为完整贴图部分
    center table 贴图旋转中心
    angle number 贴图旋转角度,逆时针为正方向
    mode table 描述旋转模式的数组,成员可能的值为:
    "H"表示水平翻转,"V"表示竖直翻转,"N"表示不翻转
  • 返回值简介:

font = LoadFont(path, size)

  • 功能: 加载字体
  • 参数简介:
    参数 类型 简介
    path string 字体文件路径
    size string 字体大小,通常为 72DPI 下的像素高度
  • 返回值简介:
    返回值 类型 简介
    font userdata/nil 加载成功返回字体数据,失败返回 nil

style = GetFontStyle(font)

  • 功能: 获取字体样式
  • 参数简介:
    参数 类型 简介
    font userdata 字体数据
  • 返回值简介:
    返回值 类型 简介
    style table 字体样式数组,成员可能的值为:
    "B"表示粗体,"I"表示斜体,"U"表示下划线,"S"表示删除线,"N"表示默认样式

SetFontStyle(font, style)

  • 功能: 设置字体样式
  • 参数简介:
    参数 类型 简介
    font userdata 字体数据
    style table 字体样式数组,成员可能的值见前述
  • 返回值简介:

height = GetFontHeight(font)

  • 功能: 获取字体高度
  • 参数简介:
    参数 类型 简介
    font userdata 字体数据
  • 返回值简介:
    返回值 类型 简介
    height number 字体高度,单位:像素

width, height = GetTextSize(font, text)

  • 功能: 获取文本尺寸
  • 参数简介:
    参数 类型 简介
    font userdata 字体数据
    text string 文本内容
  • 返回值简介:
    返回值 类型 简介
    width number 文本宽度,单位:像素
    height number 文本高度,单位:像素

sprite = CreateTextSprite(font, text, color)

  • 功能: 创建文本贴图
  • 参数简介:
    参数 类型 简介
    font userdata 字体数据
    text string 文本内容
    color table 文本颜色
  • 返回值简介:
    返回值 类型 简介
    sprite userdata/nil 创建成功返回贴图数据,失败返回 nil
🎼 音乐音效相关 API

music = LoadMusic(path)

  • 功能: 加载音乐
  • 参数简介:
    参数 类型 简介
    path string 音乐文件路径
  • 返回值简介:
    返回值 类型 简介
    music userdata/nil 加载成功返回音乐数据,失败返回 nil

PlayMusic(music, times, fading_time)

  • 功能: 延时指定时间
  • 参数简介:
    参数 类型 简介
    music userdata 播放音乐
    times number 播放次数,-1 为循环播放
    fading_time number 淡入效果持续时间,默认为 0,单位:毫秒
  • 返回值简介:

StopMusic(fading_time)

  • 功能: 停止正在播放的音乐
  • 参数简介:
    参数 类型 简介
    fading_time number 淡出效果持续时间,默认为 0,单位:毫秒
  • 返回值简介:

SetMusicPosition(position)

  • 功能: 设置正在播放的音乐播放位置
  • 参数简介:
    参数 类型 简介
    position number 播放位置,此操作仅支持以下三种格式的音乐,且参数意义各不相同:
    MOD:设置当前播放位置为此编码模型中对应索引的数据块处,0 将跳转至音乐开头;
    OGG:设置当前播放位置为从音乐开始位置计算的指定秒数处;
    MP3:设置当前播放位置为从当前播放位置计算的指定秒数处,可以先使用 RewindMusic 将当前音乐的播放位置重置到开始处
  • 返回值简介:

SetMusicVolume(volume)

  • 功能: 设置音乐音量
  • 参数简介:
    参数 类型 简介
    volume number 音乐音量,取值范围为 0 ~ 128
  • 返回值简介:

volume = GetMusicVolume()

  • 功能: 获取音乐音量
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    volume number 音乐音量,取值范围为 0 ~ 128

PauseMusic()

  • 功能: 暂停正在播放的音乐
  • 参数简介:
  • 返回值简介:

ResumeMusic()

  • 功能: 恢复当前暂停状态的音乐
  • 参数简介:
  • 返回值简介:

RewindMusic()

  • 功能: 重新播放当前正在播放的音乐
  • 参数简介:
  • 返回值简介:

playing = CheckMusicPlaying()

  • 功能: 判断当前音乐是否正在播放
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    playing boolean 当前是否正在播放音乐

paused = CheckMusicPaused()

  • 功能: 判断当前音乐是否处于暂停状态
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    playing boolean 当前音乐是否处于暂停状态

type = GetMusicFadingType()

  • 功能: 判断当前音乐的淡入淡出状态
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    type string 当前音乐的淡入淡出状态,可能的值为:
    "O"表示正在淡出,"I"表示正在淡入,"N"表示无淡入淡出效果

sound = LoadSound(path)

  • 功能: 加载音效
  • 参数简介:
    参数 类型 简介
    path string 音效文件路径
  • 返回值简介:
    返回值 类型 简介
    sound userdata/nil 加载成功返回音效数据,失败返回 nil

PlaySound(sound, times)

  • 功能: 加载音效
  • 参数简介:
    参数 类型 简介
    sound userdata 音效数据
    times number 播放次数,-1 为循环播放
  • 返回值简介:

SetSoundVolume(sound, volume)

  • 功能: 设置音效音量
  • 参数简介:
    参数 类型 简介
    sound userdata 音效数据
    volume number 音效音量,取值范围为 0 ~ 128
  • 返回值简介:

volume = GetSoundVolume(sound)

  • 功能: 获取音效音量
  • 参数简介:
    参数 类型 简介
    sound userdata 音效数据
  • 返回值简介:
    参数 类型 简介
    volume number 音效音量,取值范围为 0 ~ 128
⏲ 时间控制相关 API

Delay(time)

  • 功能: 延时指定时间
  • 参数简介:
    参数 类型 简介
    time number 延时时间,单位:毫秒
  • 返回值简介:

time = GetInitTime()

  • 功能: 获取从程序初始化到现在的时间
  • 参数简介:
  • 返回值简介:
    返回值 类型 简介
    time number 从程序初始化到现在的时间,单位:毫秒
📌 数据存储相关 API

json = LoadJSON(str)

  • 功能: 加载 JSON 字符串为 Lua 数据
  • 参数简介:
    参数 类型 简介
    str string JSON 字符串
  • 返回值简介:
    返回值 类型 简介
    json nil/number/string/boolean/table JSON 字符串反序列化得到的 Lua 数据

str = DumpJSON(json)

  • 功能: 加载 JSON 字符串为 Lua 数据
  • 参数简介:
    参数 类型 简介
    json nil/number/string/boolean/table 可以被序列化为 JSON 字符串的 Lua 数据
  • 返回值简介:
    返回值 类型 简介
    str string JSON 字符串
MIT License Copyright (c) 2022 Voidmatrix Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

bilibili直播间弹幕控制游戏开发框架 展开 收起
C++ 等 4 种语言
MIT
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/Voidmatrix/DanmuGame.git
git@gitee.com:Voidmatrix/DanmuGame.git
Voidmatrix
DanmuGame
DanmuGame
main

搜索帮助