2016-02-03 4 views
0

Я работаю над консольным дисплеем FPS/Clock для отладки игры Allegro, над которой я работаю, и я пытался выяснить, как получить вывод на консоль без необходимости придерживаться произвольная система («cls») в верхней части игрового цикла.Возврат каретки Несколько строк

Сейчас у меня есть ...

while(game.running()) 
{ 
    std::cout 
     << "\r" << "FPS: " << getFrameRate() 
     << "\n" 
     << "\r" << "TIME: " << getTime(); 

    // Other game loop things... 
} 

То, что я за что-то вроде этого, где линия будет переписан каждый раз.

FPS: ___ 
TIME: ___ 

(где ___ является то, что текущее значение)

Но когда я бегу я получаю ...

FPS: ___ 
FPS: ___ 
FPS: ___ 
TIME: ___ 

↑ идет дальше и дальше ... заполняет экран с FPS : __ и одно ВРЕМЯ: __ в самом низу без перезаписи.

'\ r' всегда меня путают, и я не нашел ничего полезного в Google. Любая помощь приветствуется.

+2

'\ r' перематывается в начало текущей строки. '\ n' переходит к следующей строке. В стандартном C++ нет пути в одну строку. Существуют библиотеки для расширенных текстовых интерфейсов: [ncurses] (https://en.wikipedia.org/wiki/Ncurses), пожалуй, самый известный. –

+2

Когда вы упоминаете 'system (" cls ")' вы нацеливаете Windows? Или вы используете псевдоним bash? Если вы используете окна, есть целый набор команд, которые работают в окне консоли, которые могут оказаться полезными. Вероятно, вы хотите [SetConsoleCursorPosition] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686025 (v = vs.85) .aspx). – paddy

ответ

1

Как насчет использования putchar (int)? Подобно putchar (0x08) назад или около того.

Я не уверен, но проблема в CR (0x0D Carriage Return) и LF (0x0A Line Feed) не работает так, как вы ожидали. Возможно, это связано с тем, что класс std :: cout будет выравниваться до стандартного (в вашем случае терминала) только после нескольких вызовов getFrameRate().

1

Когда вы испускаете '\ r', он помещает курсор в начало текущей строки. Однако, если вы переместите текущую строку вниз, испустив '\ n', тогда следующий '\ r' вернется к началу этой новой строки.

Вам нужно будет испустить символы терминала, чтобы вернуть каретку в верхнюю левую часть экрана.

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