我正在尝试用 Java 编写节奏游戏。我正在播放带有 a 的音频文件,javax.sound.sampled.Clip
我想知道我所在的确切位置。
根据我的研究,节奏游戏的一个好习惯是使用音乐播放中的位置而不是系统时间来跟踪时间(以避免音频和游戏之间的转换)。
System.nanoTime()
我已经编写了一个用于保持一致帧速率的主循环。但是当我尝试获取剪辑的时间时,我有几帧返回相同的时间。这是我的代码的摘录:
while (running) {
// Get a consistent frame rate
now = System.nanoTime();
delta += (now - lastTime) / timePerTick;
timer += now - lastTime;
lastTime = now;
if (delta >= 1) {
if(!paused) {
tick((long) Math.floor(delta * timePerTick / 1000000));
}
display.render();
ticks++;
delta--;
}
// Show FPS ...
}
// ...
private void tick(long frameTime) {
// Doing some stuff ...
System.out.println(clip.getMicrosecondPosition());
}
我期待一个一致的输出(120 fps 的每帧增量约为 8,333 µs),但我在几帧中得到了相同的时间。
控制台返回:
0
0
748
748
748
10748
10748
10748
20748
20748
20748
30748
我怎样才能始终如一地准确地跟踪我在歌曲中的位置?javax Clip 有什么替代品吗?