Нашёл совсем очевидное решение, перед ожиданием нажатия клавиши ставить опцию input.filter = keyboard , чтобы отжатия клавиш перестали ловиться.Tookser писал(а): ↑04 май 2018, 19:28Понял, спасибо.
Ещё один вопрос. У меня есть цикл, в котором key = t.read() и проверка состояния клавиш, это основная часть интерфейса. Включена опция input.filter = keyboard+ , как в каком-то примере. Но эта опция мешает в другой части программы ждать нажатия любой клавиши с помощью terminal_read (так как туда попадает отжатие клавиши). Как проще всего разрешить этот конфликт?:?
BearLibTerminal - псевдоконсольное окно для рогалика
Модератор: Apromix
Re: BearLibTerminal - псевдоконсольное окно для рогалика
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Пришла в голову идея
Сделать в терминале переназначение клавиш через конфигурационный файл. А также добавить виртуальные клавиши для самых основных функций рогалика, как поднятие предметов (TK_PICKUP), выход из сцены (TK_QUIT), открытие инвентаря (TK_INVENTORY) и т.д.

- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
А как сделать счелчок мышкой по слову?
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Поочередно перерисовывать спрайт стрелы по траектории движения оной?
Причем если летит медленно - перерисовывать с учетом окрестных спрайтов. Ну, что-бы летела трела а не квадрат с изображением стрелы на нем.
А если летит быстро - можно попробовать и "квадрат со стрелой". Авось не заметят.
Причем если летит медленно - перерисовывать с учетом окрестных спрайтов. Ну, что-бы летела трела а не квадрат с изображением стрелы на нем.
А если летит быстро - можно попробовать и "квадрат со стрелой". Авось не заметят.
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Ага, мне тоже эта идея приходила. Кажется, что можно довольно гибко сделать. Проблема в том, что набора предзаготовленных констант не хватит в общем виде. Получается нужно как-то связать конфиг со значениями, которые будет выбирать разработчик, но в конфиге это строчки, а в коде цифры.Apromix писал(а):Пришла в голову идеяСделать в терминале переназначение клавиш через конфигурационный файл. А также добавить виртуальные клавиши для самых основных функций рогалика, как поднятие предметов (TK_PICKUP), выход из сцены (TK_QUIT), открытие инвентаря (TK_INVENTORY) и т.д.
Всмысле понять, что щелкнули по слову? Тут помощи от терминала мало, он может подсказать разве что символ и цвет, куда щелкнули. Можно пытаться читать символы влево и вправо до пробела или переноса, но не факт что это будет работать надежно. Чую есть куда подумать в этом направлении, возможность отличать одни тайлы от других по некоторой незаметной дополнительной информации о них может быть полезной.Apromix писал(а):А как сделать счелчок мышкой по слову?
karagy прав, нужно рисовать спрайт по траектории. Разве что "с учетом окрестных спрайтов" это в терминале из коробки, и в произвольном месте спрайт нарисовать это тоже просто, но все равно рисовать самому. Анимацию тоже хотелось бы как-нибудь приделать, например мне очень нравится плавное перемещение действующих лиц между клетками, снаряды и прочие эффекты опять же. Но анимация за пределами (или поперек) сетки знакомест -- это допущение, которое расшатывает все повествование =(. Помимо того, что это непросто включить в лаконичный API, есть еще проблема где остановиться, ведь начав плавно перемещать спрайты из клетки в клетку, хочется добавить красивостей и остальным элементам.Apromix писал(а):Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?
Пытается раскуклиться
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Так есть функция в терминале put_ext, которая рисует спрайт с нужным смещением. С помощью неё достаточно легко можно реализовать плавное перемещение и полет стрелы. Только терминал скорее всего надо будет блокироваться на время отрисовки анимации.Cfyz писал(а): ↑22 янв 2019, 17:18
karagy прав, нужно рисовать спрайт по траектории. Разве что "с учетом окрестных спрайтов" это в терминале из коробки, и в произвольном месте спрайт нарисовать это тоже просто, но все равно рисовать самому. Анимацию тоже хотелось бы как-нибудь приделать, например мне очень нравится плавное перемещение действующих лиц между клетками, снаряды и прочие эффекты опять же. Но анимация за пределами (или поперек) сетки знакомест -- это допущение, которое расшатывает все повествование =(. Помимо того, что это непросто включить в лаконичный API, есть еще проблема где остановиться, ведь начав плавно перемещать спрайты из клетки в клетку, хочется добавить красивостей и остальным элементам.Apromix писал(а):Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Подумал, что реализовать плавное перемещение героя будет не так просто - как правило он всегда в центре отображаемой карты, и придется плавно скроллить всю карту, а его оставлять на месте.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Есть проблема с фулскрином на линуксе: если передавать в terminal_set(...) "window.fullscreen=true" до первого рефреша (но, естественно, после terminal_open), то в полноэкранный режим окно не переходит. Если после рефреша - то переходит, но без ресайза ячеек (т.е. полосы не только по бокам экрана, но и сверху/снизу). В случае с alt+enter все работает как надо.
Также касательно проблемы растягивания символов при фулскрине: т.к. это портит изображение было бы неплохо дать пользователю возможность перезагрузить шрифты в более высоком разрешении. Технически, это уже сейчас возможно, но неизвестно какой size оптимален. Можно, конечно, получать размер ячеек в пикселях, но в фуллскрине они возвращают те же значения, что и в обычном режиме.
P.S. Проверял на linux mint 19.1. Библиотека 64 бит, версия 0.15.7
Также касательно проблемы растягивания символов при фулскрине: т.к. это портит изображение было бы неплохо дать пользователю возможность перезагрузить шрифты в более высоком разрешении. Технически, это уже сейчас возможно, но неизвестно какой size оптимален. Можно, конечно, получать размер ячеек в пикселях, но в фуллскрине они возвращают те же значения, что и в обычном режиме.
P.S. Проверял на linux mint 19.1. Библиотека 64 бит, версия 0.15.7
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Выскажу свое мнение о мелькавшей тут идее перевести BearLibTerminal на рельсы SDL2.
Лично мое мнение: отличная идея.
Переход на SDL сделает библиотеку стабильней и гарантирует что она будет работать и через 10 лет, так как SDL будет продолжать обновляться под новые версии ОС. Например, линуксы хотят массово перейти на Wayland. Если BearLibTerminal будет работать на SDL, то переход произойдет максимально гладко.
Мне кажется, небольшая зависимость - это наименьшее зло.
К тому же у библиотеки останется самое главное, из-за чего она интересна: поддержка ttf и юникода из коробки + минимализм интерфейса (ну и поддержка фуллскрина, лично для меня).
На данный момент, для тех кто хочет иметь простую библиотеку терминала без лишних наворотов, но с нормальной поддержкой шрифтов и рендерингом через openGL - BearLibTerminal, ИМХО, безальтернативен.
Лично мое мнение: отличная идея.
Переход на SDL сделает библиотеку стабильней и гарантирует что она будет работать и через 10 лет, так как SDL будет продолжать обновляться под новые версии ОС. Например, линуксы хотят массово перейти на Wayland. Если BearLibTerminal будет работать на SDL, то переход произойдет максимально гладко.
Мне кажется, небольшая зависимость - это наименьшее зло.
К тому же у библиотеки останется самое главное, из-за чего она интересна: поддержка ttf и юникода из коробки + минимализм интерфейса (ну и поддержка фуллскрина, лично для меня).
На данный момент, для тех кто хочет иметь простую библиотеку терминала без лишних наворотов, но с нормальной поддержкой шрифтов и рендерингом через openGL - BearLibTerminal, ИМХО, безальтернативен.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Как в python вызвать функцию terminal_print? Пишет, что не находит такой.
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Возможно, это в Python 2.x? Для Python3 есть print, но в Python2 это ключевое слово и не может быть реиспользовано нигде. Поэтому для Python2 в модуле есть функция _print (с подчеркиванием) как быстрый костыль. Или puts (для строк) как симметричная put (для отдельных символов). Или printf (с форматированием). Я все не мог решить как лучше и в итоге вышло то, что вышло =(.altmax писал(а):Как в python вызвать функцию terminal_print? Пишет, что не находит такой.
Пытается раскуклиться
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Python 3.7, вроде как самая последняя версия. До этого на C++ писал - там всё работало нормально.Решил попробовать Python - если импортировать функции из прилагаемого к библиотеке файла - то всё работает, а ежели напрямую из dll вызывать, то к примеру terminal_put работает, а terminal_print - пишет, что нет такой функции.Cfyz писал(а): ↑11 окт 2019, 19:17Возможно, это в Python 2.x? Для Python3 есть print, но в Python2 это ключевое слово и не может быть реиспользовано нигде. Поэтому для Python2 в модуле есть функция _print (с подчеркиванием) как быстрый костыль. Или puts (для строк) как симметричная put (для отдельных символов). Или printf (с форматированием). Я все не мог решить как лучше и в итоге вышло то, что вышло =(.altmax писал(а):Как в python вызвать функцию terminal_print? Пишет, что не находит такой.
C Python никогда ранее не связывался, ребенок им увлекся, теперь и я изучаю, чтобы хоть что-то уметь объяснить.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Используй terminal.printf(x, y, text)
Тут работающее приложение, можешь посмотреть пример. https://github.com/Vapekreng/Mafia
Тут работающее приложение, можешь посмотреть пример. https://github.com/Vapekreng/Mafia
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
А, так бы сразу и говорили. Тогда все немного хитрее и с Python напрямую не связано. Библиотека (.dll/.so) экспортирует ряд функций, terminal_xxx. Некоторые функции имеют сигнатуры, "готовые к употреблению" в большинстве языков, например put (аргументы это три обычных int), и можно просто указать компилятору мол есть put и он сам возьмёт соответствующую из библиотеки.
А некоторые функции напрямую так не мапятся, потому что типы не соответствуют (или автоматически не переводятся) или потому что точно такой функции в библиотеке на самом деле вообще нет.
print в этом случае выделяется по обеим причинам. Во-первых, строка в целевом ЯП может иметь символы размером 1, 2 или 4 байта. Поэтому все функции, принимающие или возвращающие строки, в библиотеке экспортированы в трёх вариантах с суффиксами 8, 16 или 32. Например, terminal_set16.
Во-вторых, print может иметь несколько необязательных аргументов, например выравнивание или размер области печати, да ещё возвращает получившийся на самом деле размер (что тоже приходится через аргументы возвращать). Но экспортировать несколько вариантов (несколько наборов по 8/16/32 бит вариантов) нерационально. Поэтому экспортируется только одна самая общая функция, а остальные получаются из нее во враппере. Реальная же функция в библиотеке имеет жуткий вид void terminal_print_ext8(int x, int y, int width, int height, int align, char8_t* str, int* out_width, int* out_height).
Посмотри во враппере Python как puts сделан -- там и импорт двух вариантов функции (для простой строки и юникодной) и сокрытие лишних аргументов от пользователя.
А некоторые функции напрямую так не мапятся, потому что типы не соответствуют (или автоматически не переводятся) или потому что точно такой функции в библиотеке на самом деле вообще нет.
print в этом случае выделяется по обеим причинам. Во-первых, строка в целевом ЯП может иметь символы размером 1, 2 или 4 байта. Поэтому все функции, принимающие или возвращающие строки, в библиотеке экспортированы в трёх вариантах с суффиксами 8, 16 или 32. Например, terminal_set16.
Во-вторых, print может иметь несколько необязательных аргументов, например выравнивание или размер области печати, да ещё возвращает получившийся на самом деле размер (что тоже приходится через аргументы возвращать). Но экспортировать несколько вариантов (несколько наборов по 8/16/32 бит вариантов) нерационально. Поэтому экспортируется только одна самая общая функция, а остальные получаются из нее во враппере. Реальная же функция в библиотеке имеет жуткий вид void terminal_print_ext8(int x, int y, int width, int height, int align, char8_t* str, int* out_width, int* out_height).
Посмотри во враппере Python как puts сделан -- там и импорт двух вариантов функции (для простой строки и юникодной) и сокрытие лишних аргументов от пользователя.
Пытается раскуклиться
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость