音游重写计划
本篇文档为接下来的重写做准备
界面(采用 WPF)
- 歌曲选择(同时播放对应音乐) => 开始游戏
- 设置(按键绑定,音量调节,自定义背景皮肤)
- 歌曲和铺面导入和删除
- 退出游戏
游戏主体部分
- 包含游戏信息的各种类,游戏开始时接收参数,后续绘制画面则根据接收参数决定,满足自定义效果。
- 考虑使用 wpf media 微软参考文档。
有一个计时器,获取时为毫秒单位,使用 QueryPerformance((Frequency, Counter)) 更新。 - 用 list 保存 4 个轨道。
- 游戏开始后开启线程 while 循环不断检测和绘制。
- 游戏正常结束时间以铺面文件为准。
检测流程
- 是否结束
- 是否暂停
- 更新计时器
- 检测判定
- 绘图
轨道
- 轨道存储音符。
轨道状态
- 轨道的按键检测有三个状态:激活,按住,松开。
- 具体实现使用
keyPressStat
枚举类型。 - 当对应的键按下时响应事件,对应的轨道的状态设置为激活,第一次判定扫描后将状态设置为按住。当对应键松开时,直接将状态设为松开。
轨道扫描
- 调用每个轨道第一个
note
自己的判定方法,参数为当前时间和轨道按下状态。 - 音符判定方法返回判定结果,由轨道处理。
音符
- 内部存储判定所需信息。
- 实现判断接口
interface
,返回判定结果。
暂停
- 对应键被按下后,调用函数停止音乐播放
和游戏计时累加。游戏中的暂停设置被打开,此时游戏检测到暂停后不再对轨道进行检测,游戏画面绘制也暂停。
重新开始
- 将所有状态清空,重新读取配置文件。
退出
- 如果是主动选择,将游戏的退出设置打开。等游戏检测到时处理。
- 退出时将所有资源释放。
奥托普雷
- note 实现 auto() 函数返回必要信息。
回放功能
- 记录玩家按下和松开按键时间
绘制
- 需要信息:整个游戏。
- 当检测到对应轨道不是松开时,绘制按下效果。有音符被击中则绘制打击动画。
- 在游戏开始时创建绘制类,加载相关资源。
- 绘制音符时对轨道扫描,针对不同音符绘制。