MIDI音符定位到3D空间

时间:2014-06-05 11:03:29

标签: parsing 3d midi game-maker

我在编写游戏时遇到了麻烦。由于我不太了解MIDI文件,我将它们转换为Text,然后将其加载到我的游戏中。注意出现,但几秒钟之后它们的位置不同步......有人可以告诉我为什么吗?特别是因为我有点新手...... 这是包含数据的文件示例:

RESOLUTION 480
TEMPO
0 422000
480 423000
960 422000
1440 423000
1920 422000
2400 423000
2880 422000
3360 423000
3840 422000
4320 423000
4800 422000
5280 423000
5760 420000
6240 420998
6720 426000
7200 427000
7680 426000
8160 408000
8640 422000
9120 423000
9600 422000
10080 426000
10560 427000
11040 426000
11520 413999
12480 408998
13440 434999
14400 415000
15840 413999
16320 415000
16800 423999
17280 415997
END
TIMESPANS
0 6
20160 9
24480 6
162720 3
164160 6
END
PART GUITAR
5760 0 420
6240 1 0
6720 2 0
7200 3 0
7680 2 0
8160 1 0
8640 0 420
9120 1 0
9600 2 0
10080 3 0
10560 2 0
11040 1 0
11520 0 420
12000 1 0
12480 2 0
12960 3 0
13440 2 0
13920 1 0
14400 0 420
14880 1 0
15360 2 0
15840 3 0
16320 2 0
16800 4 0
17280 1 0
17280 4 0
END

我的游戏中的所有代码每秒执行60次(因此,游戏将有60 FPS)。游戏制作的每一步(1/60),笔记移动2.5个3D单位。 所以,这是我用来放置音符的公式:

_pos = notePosition / 3 / 2.5; //其中notePosition是MIDI音符的ABSOLUTE位置,2.5是音符每1/60秒运动一次。我不知道3是什么,但似乎开始正确,然后歌曲不同步......

那么,加载MIDI音符的正确公式是什么(虽然歌曲文件不是MIDI,所有位置都对应于实际的MIDI位置)?

提前致谢,请原谅我的英语不好!

1 个答案:

答案 0 :(得分:1)

您不能依赖fps变量来更新游戏时间,因为它不够准确。相反,使用current_time变量,该变量给出自游戏开始以来的毫秒数。

http://gamemaker.info/en/manual/403_07_timing