2015-06-09 6 views
3

В настоящее время я работаю над созданием игры, вдохновленной Guitar Hero и Frets on Fire, до сих пор все прошло хорошо - я написал сценарий, который может анализировать файлы .chart, созданные с помощью FeedBack Editor в пригодные для использования данные.Guitar Hero-like Timing Mechanic

Моя забота заключается в том, как бы я сделал, чтобы убедиться, что время правильное (я должен будет преобразовать эти значения биений в ms вместо) _? Файлы, которые я обрабатываю, содержат такие значения;

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

Если первое число есть на то, что бить примечание должно произойти, N, является ли или нет банкнота молоток-на, то лада ID_ (зеленый или красный и т.д.) _ и длительность ноты , снова в битах.

Я беспокоюсь, что песни будут легко выходить из строя, если появляются внезапные всплески FPS, что может помешать ему выйти из синхронизации?

Я попытался найти источники, чтобы выяснить, как они уверены, что время на нотах правильное, но я не могу найти ничего полезного.

+0

Большинство песен не соответствуют строгому темпу, поэтому краткое описание, например .chart, слишком просто для синхронизации с записью. Выбор песен с более строгим темпом и предварительная обработка музыки с использованием квантования поможет. Это также не похоже на то, что вы знаете, когда первый удар, так что я также предлагаю предварительную обработку там тоже. В противном случае вы не будете знать, в чем причина выхода из синхронизации. Я предлагаю отлаживать с помощью простой электронной записи метронома. – ryanpattison

ответ

1

Это сложная проблема, потому что это зависит от вашего API аудио-плеера. Чтобы он работал правильно, вам нужно будет иметь функцию в вашем плеере, которая возвращает текущую позицию воспроизведения. Допустим, у вашего API-плеера есть способ получить позицию в миллисекундах.

Я бы сделал синхронизацию в собственном коде, потому что если вы используете значение в пределах lua, GC может ударить вас и выкинуть вас из синхронизации. Просто используйте lua для анализа таймингов и настройки массивов структур (или чего-то подобного) для собственного кода.

+0

Думаю, я мог бы взять воду над моей головой: P Проблема в том, что я делаю это ... «игра» в другой игре. Игра, в которой я пишу скрипт, использует библиотеку BASS, поэтому я могу установить и установить положение звука - но она использует секунды, а не миллисекунды - так что это было бы не очень точно. Я боюсь .. . – Dealman

+0

@Dennis использует секунды, но в плавающей запятой, так что доля составляет миллисекунды, нет? – ryanpattison

+0

@rpattiso: Вы действительно были правы, он возвращает плавающую точку с большим количеством десятичных знаков - 7.5110430839002. Кто-нибудь знает, как такие игры, как «Фритты в огне» и «Guitar Hero», удостоверяются, что ноты в начале отсчитываются правильно? Я не могу найти какую-либо полезную информацию по этому вопросу, я действительно верю в римейк «Фритты в огне», называемый FoFix, или что-то было с открытым исходным кодом - думаю, я мог бы найти это, возможно, я найду какие-то подсказки :) Изменить: Чтобы немного уточнить, я не совсем уверен, как использовать первое значение, которое так или иначе связано с BPM. – Dealman