2021SC@SDUSC
一、前言
1.说明
audio 说明文档地址
audio package - github.com/hajimehoshi/ebiten/v2/audio - pkg.go.dev
本文中所有截图和代码均来自说明文档或 ebiten 源文件
笔者负责 audio 音频相关的代码分析
2.梗概
详细分析 Run 方法的实现
二、跟着 Debug
1.设置断点
首先在 Update、Draw、Layout、main 方法中设置断点,观察启动顺序。
然后重点关注 Upadate 方法中的断点,查看音频相关方法的调用关系。
2.启动顺序
首先进入 main 函数
接着进入 RunGame 方法
之后调用 uiDriver 的 Run 方法
然后进入 Run 方法中的 Loop 方法
Loop 方法是比较重要的,之后程序一直在这个方法中循环
下面是循环方法,循环这个线程中的方法
- main
- RunGame
- Run
- Loop
- Layout
- Update
- Draw
- Loop
- Run
- RunGame
Layout、Update、Draw,三个方法循环调用
3.Run
下面具体解析一下 RunGame 中的 Run 方法
RunGame starts the main loop and runs the game.
必须在主线程上调用RunGame。
RunGame返回错误三种情况
- 底层图形驱动程序中发生错误
- 音频错误
- f 返回错误时
Run 方法
首先初始化主线程,以便线程在u.run时可用。
进入循环
Loop 启动线程循环,直到调用的函数返回 BreakLoop。
t.funcs 中就包含了 Update、Draw、Layout 三个方法
作用:
game’s Update function is called every tick to update the game logic.
game’s Draw function is called every frame to draw the screen.
game’s Layout function is called when necessary, and you can specify the logical screen size by the function.