2012-01-08 2 views
1

Я пишу игру в командной строке, которая должна работать на 4-40 FPS (выберет позже). Но у меня проблема. Рисование «изображения», состоящего из 1920 цветных символов с использованием putchar(), занимает 0,2-0,3 секунды, и я могу видеть, как мое изображение рисуется по строкам. Однако, например, в Firefox я могу нарисовать 64000 пикселей RGB на холсте почти менее чем за десятую часть секунды.Запись на консоль без задержек

Есть ли способ избежать этой задержки, и это задержка, вызванная консолью, или это действительно, сколько времени требуется для обработки вывода?

+0

Консольные игры такого рода были вокруг в течение долгого времени. Рассматривали ли вы взгляды на уровень техники, чтобы понять, как они решили эту проблему? Это может быть хорошим местом для начала: http://code.google.com/p/ascii-game-engine/ – aroth

ответ

7

Не использовать putchar. Сделайте буфер, полный ваших символов, представляющий состояние экрана, и используйте write, чтобы сразу отправить ваш буфер на stdout, а затем очистить его.

Например: write(STDOUT_FILENO, buffer, buffer_size); fflush(stdout);

+0

Спасибо, но будет ли он работать при ~ 20 FPS? – Triang3l

+0

Пробовал это, не вижу пользовательский цвет, у вас есть решение? – Triang3l

+0

Чтобы изменить собственный цвет, просто используйте 'fputs (" \ 033 [40m ", stdout)' например. –

2

Вы должны собрать свою выходную строку в памяти и записать его в одном мире с помощью PRINTF например

+0

Чтобы покрасить ваш результат, посмотрите: http://linuxgazette.net/issue65/padala.html –

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