【问题标题】:Guitar Hero-like Timing Mechanic吉他英雄般的计时机制
【发布时间】:2015-08-24 17:23:41
【问题描述】:

我目前正在制作一款受吉他英雄和 Frets on Fire 启发的游戏,到目前为止一切进展顺利 - 我编写了一个脚本,可以将 FeedBack Editor 生成的 .chart 文件解析为可用数据。

我关心的是如何确保时间正确_(我将不得不将这些节拍值转换为毫秒)_?我正在解析的文件包含这些值;

0 = N 1 120
120 = N 2 120
240 = N 3 576

第一个整数是音符应该出现在哪个拍子上,N 是音符是否是锤上,然后是音品 ID_(绿色或红色等)_ 和音符的长度,同样以节拍为单位.

我担心如果突然出现 FPS 延迟峰值,歌曲很容易不同步,有什么方法可以防止它不同步?

我试图寻找资源以弄清楚他们如何确保笔记上的时间是正确的,但我似乎找不到任何有用的东西。

【问题讨论】:

  • 大多数歌曲不符合严格的节奏,因此 .chart 之类的摘要过于简单,无法与录音保持同步。选择节奏更严格的歌曲并使用量化对音乐进行预处理会有所帮助。看起来你也不知道第一个节拍是什么时候,所以我也建议在那里进行预处理。否则,您将不知道不同步的原因是什么。我建议使用简单的电子生成节拍器录音进行调试。

标签: lua guitar


【解决方案1】:

这是一个难题,因为它取决于您的音频播放器 API。为了让它正常工作,你需要在你的播放器中有一个函数来返回当前的播放位置。假设您的播放器 API 有一个以毫秒为单位获取位置的方法。

我会在本机代码中进行同步,因为如果您在 lua 中使用该值,GC 可能会启动并使您失去同步。只需使用 lua 解析时间并为原生代码设置结构数组(或类似的东西)。

【讨论】:

  • 我想我当时可能已经把水淹没了:P 问题是我正在另一个游戏中制作这个......“游戏”。我正在编写脚本的游戏确实使用 BASS 库,因此我能够获取和设置声音位置 - 但它使用秒,而不是毫秒 - 所以恐怕它不会很准确......
  • @Dennis 它使用秒,但在浮点中,所以分数是毫秒,不是吗?
  • @rpattiso:您确实是正确的,它返回一个带有大量小数的浮点数 - 7.5110430839002。有没有人知道像 Frets on Fire 和 Guitar Hero 这样的游戏如何确保音符开头的音符时间正确?我找不到任何关于此事的有用信息,我确实相信重制的 Frets on Fire,称为 FoFix 或其他东西是开源的 - 想我可能会寻找,也许我能找到一些线索 :) 编辑:澄清有点,我不完全确定如何以某种方式使用与 BPM 相关的第一个值。
猜你喜欢
  • 2012-03-13
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多