BearLibTerminal - псевдоконсольное окно для рогалика
Модератор: Apromix
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Кстати, в выложеной версии clear_area поломан.
Реквестирую ман по подключению терминала к С#
Реквестирую ман по подключению терминала к С#
Всё вышесказанное - ИМХО, если не указано обратное.
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Именно так. Можно будет задать dx, dy для каждого тайла (которых, напоминаю, в одной ячейке может быть несколько). Цена реализации копеечная, а разных интересных плюшек можно сделать море. Это будет отдельная функция terminal_put_ext, сигнатуры terminal_put/terminal_print не изменятся; не хотите -- не пользуйтесь.Maelstraz писал(а):Возможность указывать не только координаты знакоместа для тайла, но и величину попиксельного смещения?
Упс, нигде в "демо" (которую я использую в роли теста) это не используется, проглядел.Феникс писал(а):Кстати, в выложеной версии clear_area поломан.
Для C# нужен враппер, примерно как юнит для Паскаля (но C# я по крайней мере знаю, так что точно сделаю). Однако дилемма, можно оформить в виде сборки, которая подойдет всем .NET-языкам, но добавит еще одну .dll в папку проекта. А можно сделать в виде файла на C#, который надо будет включать в проект и работать будет очевидным образом только с C#, но зато лишних .dll не будет.Феникс писал(а):Реквестирую ман по подключению терминала к С#
Пытается раскуклиться
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Оба два сразу? Как вариант.
Всё вышесказанное - ИМХО, если не указано обратное.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Ну, теперь заживём.Cfyz писал(а):Это будет отдельная функция terminal_put_ext, сигнатуры terminal_put/terminal_print не изменятся
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Махонький апдейт, так сказать 0.8.1: фикс terminal_clear_area + враппер для C#.
Враппер выполнен в виде файла на C# и должен включаться в проект (универсальную .dll придется сделать позже). В API внесены минимальные изменения для большего соответствия языку:
1. Не terminal_printf(0, 10, "HP: %d", hp); а Terminal.Print(0, 10, "HP: {0}", hp);
2. Не terminal_color(0xFFFF0000); а Terminal.Color(Color.Red); // тот самый Color, который из System.Drawing
3. Не terminal_get() != VK_CLOSE, а Terminal.Get() != Terminal.Keys.Close
4. ?????
5. PROFIT
Итого, программа-минимум:
Враппер выполнен в виде файла на C# и должен включаться в проект (универсальную .dll придется сделать позже). В API внесены минимальные изменения для большего соответствия языку:
1. Не terminal_printf(0, 10, "HP: %d", hp); а Terminal.Print(0, 10, "HP: {0}", hp);
2. Не terminal_color(0xFFFF0000); а Terminal.Color(Color.Red); // тот самый Color, который из System.Drawing
3. Не terminal_get() != VK_CLOSE, а Terminal.Get() != Terminal.Keys.Close
4. ?????
5. PROFIT
Итого, программа-минимум:
Скрытый текст: ПОКАЗАТЬ
- Вложения
-
- BearLibTerminal.cs.zip
- (2.67 КБ) 82 скачивания
-
- BearLibTerminal.dll.zip
- (434.79 КБ) 94 скачивания
Пытается раскуклиться
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Вот и на шарпеге можно затерминаллить рогуль Зачет!
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
С упорством, достойным, быть может, лучшего применения, продолжается разработка библиотечки BearLibTerminal. Вышло весьма существенное, предположительно последнее столь существенное обновление. Начавшиеся с привнесения чуть большей гибкости в вывод отдельных глифов, дальнейшие события могут быть достаточно точно охарактеризованы фразой “и тут Остапа понесло”. Но обо всем по порядку.
Изменения коснулись практически всего, кроме принципов работы. Программный интерфейс предыдущих версий формировался весьма спонтанно, внутренняя структура вообще началась с прототипа. Поэтому после недолго анализа этого бардака нестыковки и очевидные косяки были вычесаны из интерфейса. Так как отдельных мелких изменений выходит очень много, я буду описывать как будто бы с самого начала.
Библиотечка изначально и по сей день призвана решать проблему вывода текста и псевдографики на терминал в свете требований рогаликоподобных игр. Вывод в предоставляемую ОС консоль имеет кучу ограничений, обходные пути вокруг которых, если вообще есть, неуклюжи и постоянно забываются. Можно сделать окошко и набить все шишки самому, можно взять какой-нибудь движочек и долго его конфигурировать. А можно взять libtcod, ну или BearLibTerminal.
Обновленный API библиотеки состоит из 18 вызовов: terminal_open, close, set, refresh, clear, clear_area, layer, color, bkcolor, composition, put, put_ext, print, has_input, read, read_char, read_str, color_from_name. Те вызовы, что принимают строку, существуют в нескольких экземплярах в зависимости от битности символа, но этот момент скрыт биндингом (хедером) к языку. Хедер C/C++ прозрачно предоставляет однобайтные (terminal_set, terminal_print) и юникодные (terminal_wset, terminal_wprint) вызовы. Также, эти строковые вызовы имеют версии с форматированием (terminal_[w]setf, terminal_[w]printf). В случае C++, char* и wchar_t* функции перегружены и префикс "w" может быть опущен.
Вообще, с помощью этого не самого крупного API можно сделать очень дофига. Однако, совершенно необязательно пользоваться всем и сразу. При проектировании я старался придерживаться идеи, когда дополнительные фичи не маячат постоянно перед глазами, и, пока они явно не нужны, их как бы и нет.
Базовый вывод
В самом минимуме достаточно полудюжины вызовов. Вызов terminal_open инициализирует окошко псевдотерминала с классическими настройками: размером 80x25 сиволов, шрифт Fixedsys. Фактически, если все, что нужно — это быстрая замена cmd.exe, то настройка вызовом terminal_open и заканчивается. Следует отметить, что вложенный в библиотеку шрифт-по-умолчанию имеет набор символов в виде чуть расширенного WGL4. Это покрывает большое количество (по большей части европейских) языков и некоторую полезную пунктуацию, а также символы рисования рамочек.
Помимо банальностей типа задания цвета символа и фона, первым, что следует рассказывать про BearLibTerminal, является возможность тривиальной смены шрифта на практически какой угодно. Во-первых, как и много где еще, можно использовать “тайловые” шрифты. Те, которые растеризованы в картинку. Например:
Во-вторых, и это типа киллер-фича, можно поставить шрифтом сразу векторный .ttf.
Да, установка параметров через строчку никуда не делась. Более того (тут warchief не будет рад), роль такой настройки только увеличилась. terminal_options была переименована в terminal_set, так как смысл ее сместился от настройки окна один раз когда-то до установки всех тяжелых рычагов внутри библиотеки, в том числе прямо в процессе работы. По приведенным выше примерам видно, что сменился формат указания опций. Хотя допустимо указывать параметры и так, как раньше, формат был расширен докоторый то же самое, что итолько компактнее и проще для восприятия.
Работа с тайлсетами
В расширении возможностей терминала вообще и terminal_set в частности кроется причина переименования options в set. Если ранее шрифт это было огого, ШРИФТ, это ж полтерминала просто, то теперь основной шрифт это лишь один из потенциально доступных к использованию тайлсетов. Посудите сами, если терминал Юникодный и, значит, оперирует примерно 65 тысячами слотов под буквы, а в используемом шрифте лишь сотня-другая символов, то почему-бы не использовать оставшиеся примерно, хм, 65 тысяч слотов под другие тайлы? Например, вот так:Это самый простой пример: мы взяли, и set произвольный тайл в конкретный слот. Можно и похитрее, наверняка многие догадались, что основной тайловый шрифт — это просто тайлсет, установленный в ячейки-слоты 0x0000 и далее. А значит таким же образом можно подгружать и целые наборы тайлов:
Следующим существенным изменением является логичное снятие ограничения загруженного тайла размерами ячейки-знакоместа. Ранее был костыль, допускающий загрузку в слот только одиночных изображений произвольного размера посредством отдельного вызова со своим поведением. Теперь все тайлы могут быть какого угодно размера, по умолчанию они будут выводиться центрированно в знакоместе (но это можно изменить). Это позволяет иметь как набор букв размером, скажем 8x16, так и набор именно тайлов, скажем 32x32. Причем я больше вам скажу, тайлсеты можно творить как привычным образом, из картинок, так и из TrueType-шрифтов:
Возможности загрузки отдельных “спрайтов” (самостоятельных картинок) тоже были расширены. Вообще деление на спрайты и тайлы сугубо логическое, просто некоторые операции имеют больше смысла для одной группы и меньше для другой. Спрайты, предположительно, должны использоваться для вывода относительно больших, одинарных картинок: фон, портрет монстра, арт какой-нибудь. Имеющаяся картинка может иметь несколько отличные от желаемыех размеры и обрезать ее то так, то эдак в процессе прототипирования откровенно не с руки. Или быть может остальной интерфейс весь на векторных шрифтах и может менять размеры. На этот случай добавлена возможность при загрузке переразмерить спрайт:
Так как было снято ограничение на строгое соответствие размера тайла размеру знакоместа, показалось логичным сделать то же самое и в обратную сторону: отвязать размер знакоместа от размера символа основного шрифта (именно так вычислялся размер знакоместа в предыдущих версиях, строго bbox шрифта). С помощью параметра window.cellsize можно как задать произвольное значение, так и вернуться потом к поведению по умолчанию:
По этому же поводу следует отметить, что несмотря на центрирование возможно больших или меньших символов в ячейках произвольно установленного размера, символы рисования рамок всегда подходящего размера (ибо генерируются на лету). Т. е. если этими рамочками рисовать уровень или интерфейс, то все равно можно поиграть размерами шрифта или ячейки для лучшего вида, ничего не разъедется:
Следующим моментом, на который следует обратить внимание является то, что комбинируя вышеописанные возможности (несколько тайлсетов, тайлсеты из TrueType, произвольный размер, центрирование), можно выводить текст аж несколькими шрифтами сразу:
Наглядное пояснение как это работает потребует дополнительных иллюстраций, что перегрузит и без того огромный пост, так что позже. Пока просто отмечу, что это пусть и не столь интуитивно, как вывод одним основным шрифтом, но все-таки совсем не сложно.
Слои
Следующим новым моментом является такая невзрачная, но очень местами полезная сущность как слои. Слой — это просто еще один набор ячеек, такой же как всегда был в распоряжении в терминале. Возможность положить в ячейку несколько тайлов никак к слоям не относится, можно сто тайлов в ячейку первого слоя и еще сто — в ячейку второго. Нюансами работы со слоями является то, что фон ячейки есть только у самого первого, нижнего слоя, и то, что clear_area работает с текущим слоем.
Польза слоев заключается в двух вещах. Во-первых, строгий порядок (да вообще любой порядок) вывода тайлов могут помешать желаемому выводу, так как тайлы, выводящиеся позже обязательно будут наезжать на тайлы выведенные ранее. Со слоями можно сгруппировать вывод в несколько “частей” с желаемым порядком вывода. Во-вторых, иногда можно немного упростить себе жизнь модифицируя только один слой, а остальные будут отрисовываться сами по себе.
Расширенный вывод
Далее еще вкуснятина. В предыдущих версиях можно было положить тайл в ячейку лишь ровно-ровно. Неоднократно высказывалось мнение, что было бы прикольно иметь возможность положить туда тайл с некоторым смещением, добиваясь этим различных эффектов. Теперь можно. Кроме смещения я также запилил еще одну фичу (ну чтобы два раза не вставать), а именно — указание индивидуального цвета для каждого угла тайла. И все это, разумеется, можно комбинировать со всеми предыдущими возможностями (наложение, тайлы, центрирование тайлов):
Комбинируя слои и возможность попиксельного смещения тайлов, можно добиться алгоритмически тривиальной реализации некоторых простых, но интересных эффектов. Например, количество урона, визуализируемое как отлетающая от противника цифра. Т. е. таких old-school вида спецэффектов, когда весь мир замирает, давая возможность полюбоваться высплывающим сообщением, привлекающим внимание коротким миганием, взрывом, цепочкой молний и т. д.
Суть в том, что весь “спецэффект” реализуется строго в пределах одной функции, без необходимости трогать-обновлять все остальное на экране в процессе анимации.
Можно сделать еще один шажок и пойти еще дальше от собственно терминала в сторону тайлового движка. Так как в одну ячейку можно положить неограниченное количество тайлов, смещение задается у каждого индивидуально, а точку отсчета тайла возможно (естесственно) установить в его угол, появляется возможность немного абстрагироваться от ячеек и рисовать тайлы по пиксельным координатам просто передавая их двумя аргументами правее: terminal_put_ext(0, 0, x, y, code, 0);
Выше я упоминал, что загрузить тайл можно из TrueType шрифт, из растровой картинки-файла или картинки в памяти. Действительно, если сделать так:то получится тайл из указанной области памяти. Для того, чтобы это сработало, “имя” тайлсета должно быть строго в форме адреса памяти, в шестнадцатиричном виде и с префиксом 0x.
Ввод
Ввода изменения коснулись в меньшей степени.
Во-первых, Terminal_get был переименован в terminal_read, так как имя _set весьма удачно подошло совершенно иному по смыслу вызову (и если уж _get и появится, то это будет именно чтение настроек и переменных).
Во-вторых, убран к черту неочевидный режим ввода с таймаутом, он тривиально эмулируется через неблокирующий ввод. Остались интуитивно понятные блокирующий и неблокирующий режимы.
В-третьих, добавился вызов terminal_read_key, который позволяет прочитать одиночный текстовый символ с учетом раскладки клавиатуры у пользователя. Это позволит сделать свой вариант ввода строки, например с автодополнением или с визуализацией, отличной от стандартной.
Где?
Код переехал в паблик: https://bitbucket.org/cfyzium/bearlibterminal
32-битная сборка под Windows: ссылка, остальные разрядности и Linux чуть позже.
Биндинг пока только для C/C++. С точки зрения привязки библиотеки, изменения невелики, так что Pascal и C# скоро будут.
Документацию придется всю переписывать =_=.
Изменения коснулись практически всего, кроме принципов работы. Программный интерфейс предыдущих версий формировался весьма спонтанно, внутренняя структура вообще началась с прототипа. Поэтому после недолго анализа этого бардака нестыковки и очевидные косяки были вычесаны из интерфейса. Так как отдельных мелких изменений выходит очень много, я буду описывать как будто бы с самого начала.
Библиотечка изначально и по сей день призвана решать проблему вывода текста и псевдографики на терминал в свете требований рогаликоподобных игр. Вывод в предоставляемую ОС консоль имеет кучу ограничений, обходные пути вокруг которых, если вообще есть, неуклюжи и постоянно забываются. Можно сделать окошко и набить все шишки самому, можно взять какой-нибудь движочек и долго его конфигурировать. А можно взять libtcod, ну или BearLibTerminal.
Обновленный API библиотеки состоит из 18 вызовов: terminal_open, close, set, refresh, clear, clear_area, layer, color, bkcolor, composition, put, put_ext, print, has_input, read, read_char, read_str, color_from_name. Те вызовы, что принимают строку, существуют в нескольких экземплярах в зависимости от битности символа, но этот момент скрыт биндингом (хедером) к языку. Хедер C/C++ прозрачно предоставляет однобайтные (terminal_set, terminal_print) и юникодные (terminal_wset, terminal_wprint) вызовы. Также, эти строковые вызовы имеют версии с форматированием (terminal_[w]setf, terminal_[w]printf). В случае C++, char* и wchar_t* функции перегружены и префикс "w" может быть опущен.
Вообще, с помощью этого не самого крупного API можно сделать очень дофига. Однако, совершенно необязательно пользоваться всем и сразу. При проектировании я старался придерживаться идеи, когда дополнительные фичи не маячат постоянно перед глазами, и, пока они явно не нужны, их как бы и нет.
Базовый вывод
В самом минимуме достаточно полудюжины вызовов. Вызов terminal_open инициализирует окошко псевдотерминала с классическими настройками: размером 80x25 сиволов, шрифт Fixedsys. Фактически, если все, что нужно — это быстрая замена cmd.exe, то настройка вызовом terminal_open и заканчивается. Следует отметить, что вложенный в библиотеку шрифт-по-умолчанию имеет набор символов в виде чуть расширенного WGL4. Это покрывает большое количество (по большей части европейских) языков и некоторую полезную пунктуацию, а также символы рисования рамочек.
Скрытый текст: ПОКАЗАТЬ
Код: Выделить всё
terminal_set("font: Bisasam_16x16_437.png");
Скрытый текст: ПОКАЗАТЬ
Код: Выделить всё
terminal_set("font: VeraMono.ttf, size=12");
Скрытый текст: ПОКАЗАТЬ
Код: Выделить всё
group: [name0=]value0, name1=value1;
Код: Выделить всё
group.name0=value0, group.name1=value1;
Работа с тайлсетами
В расширении возможностей терминала вообще и terminal_set в частности кроется причина переименования options в set. Если ранее шрифт это было огого, ШРИФТ, это ж полтерминала просто, то теперь основной шрифт это лишь один из потенциально доступных к использованию тайлсетов. Посудите сами, если терминал Юникодный и, значит, оперирует примерно 65 тысячами слотов под буквы, а в используемом шрифте лишь сотня-другая символов, то почему-бы не использовать оставшиеся примерно, хм, 65 тысяч слотов под другие тайлы? Например, вот так:
Код: Выделить всё
terminal_set("0xE000: tile.png");
Код: Выделить всё
terminal_set("0xE100: tileset.png, size=8x16");
Скрытый текст: ПОКАЗАТЬ
В этом примере в пункте 4 продемонстрировано, что "тайлы" можно расцвечивать (terminal_color) так же, как и символы, а еще их так же можно стакать в одной клетке. Что неудивительно, ведь что тайл из тайлсета, что символ шрифта для терминала все едино.
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Слои
Следующим новым моментом является такая невзрачная, но очень местами полезная сущность как слои. Слой — это просто еще один набор ячеек, такой же как всегда был в распоряжении в терминале. Возможность положить в ячейку несколько тайлов никак к слоям не относится, можно сто тайлов в ячейку первого слоя и еще сто — в ячейку второго. Нюансами работы со слоями является то, что фон ячейки есть только у самого первого, нижнего слоя, и то, что clear_area работает с текущим слоем.
Польза слоев заключается в двух вещах. Во-первых, строгий порядок (да вообще любой порядок) вывода тайлов могут помешать желаемому выводу, так как тайлы, выводящиеся позже обязательно будут наезжать на тайлы выведенные ранее. Со слоями можно сгруппировать вывод в несколько “частей” с желаемым порядком вывода. Во-вторых, иногда можно немного упростить себе жизнь модифицируя только один слой, а остальные будут отрисовываться сами по себе.
Скрытый текст: ПОКАЗАТЬ
Далее еще вкуснятина. В предыдущих версиях можно было положить тайл в ячейку лишь ровно-ровно. Неоднократно высказывалось мнение, что было бы прикольно иметь возможность положить туда тайл с некоторым смещением, добиваясь этим различных эффектов. Теперь можно. Кроме смещения я также запилил еще одну фичу (ну чтобы два раза не вставать), а именно — указание индивидуального цвета для каждого угла тайла. И все это, разумеется, можно комбинировать со всеми предыдущими возможностями (наложение, тайлы, центрирование тайлов):
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Скрытый текст: ПОКАЗАТЬ
Код: Выделить всё
color_t* pixels[32*32];
terminal_setf(“0xE000: %#p, size=32x32”, pixels);
Скрытый текст: ПОКАЗАТЬ
Ввода изменения коснулись в меньшей степени.
Во-первых, Terminal_get был переименован в terminal_read, так как имя _set весьма удачно подошло совершенно иному по смыслу вызову (и если уж _get и появится, то это будет именно чтение настроек и переменных).
Во-вторых, убран к черту неочевидный режим ввода с таймаутом, он тривиально эмулируется через неблокирующий ввод. Остались интуитивно понятные блокирующий и неблокирующий режимы.
В-третьих, добавился вызов terminal_read_key, который позволяет прочитать одиночный текстовый символ с учетом раскладки клавиатуры у пользователя. Это позволит сделать свой вариант ввода строки, например с автодополнением или с визуализацией, отличной от стандартной.
Где?
Код переехал в паблик: https://bitbucket.org/cfyzium/bearlibterminal
32-битная сборка под Windows: ссылка, остальные разрядности и Linux чуть позже.
Биндинг пока только для C/C++. С точки зрения привязки библиотеки, изменения невелики, так что Pascal и C# скоро будут.
Документацию придется всю переписывать =_=.
Последний раз редактировалось Cfyz 22 дек 2013, 21:59, всего редактировалось 2 раза.
Пытается раскуклиться
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Не собираешься сделать анонс на RogueBasin?
оффтоп: чем ты делаешь animated gif? (например demo11.gif)
оффтоп: чем ты делаешь animated gif? (например demo11.gif)
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Конечно собираюсь. Вон весь текст в примерах на английском =) Но чуть позже, надо сначала сделать документацию: если здесь народ хоть как-то в теме, то там увидят вообще впервые.karagy писал(а):Не собираешься сделать анонс на RogueBasin?
Ручками. Fraps записывает .avi, ffmpeg бьет на отдельные фреймы, нужные импортирую пачкой в Gimp как слои, а тот уже умеет сохранять .gif. Вероятно, есть путь попроще, сразу .avi -> .gif, но с Gimp можно подредактировать картинку.karagy писал(а):чем ты делаешь animated gif?
Пытается раскуклиться
- Jolly Roger
- Сообщения: 2973
- Зарегистрирован: 27 ноя 2009, 09:10
- Откуда: Minsk, Belarus
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Я кончил, товарищи!
Теперь будущее за медведем! =D>
Есть у меня наработки для одного сайд проекта под медведь. Перееду на новую версию!
Теперь будущее за медведем! =D>
Есть у меня наработки для одного сайд проекта под медведь. Перееду на новую версию!
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Понравилось Очень =D> =D> =D>
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Вопросы:
1) как узнать, какая клавиша была отжата?
2) У меня такой ввод
3) В этом коде есть момент, через terminal_read_char() я получаю символ нажатой кнопки, а как теперь правильно узнать код этой кнопки? Звать terminal_read()()?
1) как узнать, какая клавиша была отжата?
2) У меня такой ввод
Правильно написал? А то куча команд. хотя по идее нужно было оставить только terminal_read() и функцию, которая по ее возвращаемому коду возвращает символ.bool Engine::input()
{
do
{
int key = terminal_read_char();
wchar wc = L' ';
if (key == TK_INPUT_CALL_AGAIN)
{
key = terminal_read();
if (key == TK_CLOSE)
return false;
}
else if (key > 0)
{
wc = key;
}
if (m_inputlistener.empty())
return true;
// нажатие кнопки
for (auto it = m_inputlistener.begin(); it != m_inputlistener.end(); ++it)
{
if ((*it)->KeyPressed(KeyEvent(wc, key)) == true)
break;
}
} while (terminal_has_input());
return true;
}
3) В этом коде есть момент, через terminal_read_char() я получаю символ нажатой кнопки, а как теперь правильно узнать код этой кнопки? Звать terminal_read()()?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Аналогично. Пока остальные активно обсуждали астрал, Саня сотворил настоящую магию.Jolly Roger писал(а):Я кончил, товарищи!
Теперь будущее за медведем! =D>
Прошу предоставить хедеры для делфей.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Как научить terminal_read_char() не ждать нажатия кнопки? А то из-за нее у меня не получается сделать реалтайм.
То есть я хочу так - игра выполняется в реалтайме, пользователь нажимает кнопку, система определяет код нажатой кнопки и ее символ. То есть не ждет, когда игрок нажмет кнопку, а опрашивает текущее состояние. Пользователь отжимает кнопку, теперь система определяет код отжатой кнопки и ее символ
То есть я хочу так - игра выполняется в реалтайме, пользователь нажимает кнопку, система определяет код нажатой кнопки и ее символ. То есть не ждет, когда игрок нажмет кнопку, а опрашивает текущее состояние. Пользователь отжимает кнопку, теперь система определяет код отжатой кнопки и ее символ
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Вообщем разобрался почему у меня не реалтайм. Вместо do...while, надо было просто
while (terminal_has_input()){}
Возникла другая проблема - мерцание текста, как лечить, надеюсь в движке есть двойной буфер? Собственно эта проблема у меня была и не в реалтайме.
while (terminal_has_input()){}
Возникла другая проблема - мерцание текста, как лечить, надеюсь в движке есть двойной буфер? Собственно эта проблема у меня была и не в реалтайме.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей