2012-06-29 2 views
2

У меня вопрос, который я не знаю, как хорошо объяснить, но я попробую ... например, в некоторых играх вывод текста «медленный», написание символа один за другим, и не вся фраза за один раз ... так, как я могу воспроизвести это поведение?«Замедленный» выход

Я так думаю ... Я могу сделать цикл, и где я пишу символ и умею в течение 1 миллисекунды, писать char и usleep и т. Д. ... есть другой способ, или это единственный/лучший/простой способ Я могу реализовать этот трюк? Я пытаюсь сделать это на C++, но другое предложение приветствуется.

+1

Вы могли бы сделать класс, который помогает делать то, что вы описали. Тогда вы можете легко использовать его. – chris

+0

У вас есть основной цикл игры? если это так, вы можете обычно иметь ссылку на время, либо ваш, либо на основе истинных часов – Salepate

ответ

0

Ну, да, это решение, но вы должны его нить, или это замедлит вашу игру. Правда, 1 мс может быть недостаточно визуально. Я предлагаю вам сделать несколько тестов, чтобы их увидеть.

Выход? производится на терминале? Если это так, возможно, вы также можете использовать некоторые возможности термина.

Редактировать: вы также можете использовать часы!

+0

вывод будет на текстовой области ... что вы имеете в виду, используя часы? – user1466609

+0

Признавая, что вы находитесь в цикле, и вы хотите точную паузу (не зависимо от производительности, как вызов sleep()), скажем, 1сек, вы получаете часы() или ctime() в первой печатной букве, а затем сравниваете ellapsed time, используя оператор if, когда он достиг 1 с, вы печатаете другое письмо и повторно инициализируете часы/время и так далее ... Надеюсь, я достаточно ясен. – Maresh

0

Использование отдельной темы только для обновления фрагмента текста было бы пустой тратой ресурсов, если вы спросите меня. В этом случае я бы рекомендовал это сделать, чтобы определить количество символов, которые должны отображаться на экране за одну секунду, а затем подсчитать количество миллисекунд с момента последнего обновления текста. Затем нужно умножить на эту величину

Пример:

float charsPerSecond = 60/1000; 
float lastUpdated; 
... 
int nrChars = (int) (charsPerSecond * (currentTime - lastUpdated)); 
//output nrChars characters 
lastUpdated = currentTime; 
+0

спасибо, я попробую этот путь – user1466609

Смежные вопросы