Зачем формы, впф и прочее работающее на откровенных костылях в игровом приложении? Ведь есть же прекрасные реализации уже заточенные под конкретный движок. Например, под XNA (а не далеко отсюда и MonoGame c его вариативностью платформ) есть отличная open source библиотека Neoforce... да и не одна она.Cfyz писал(а):И, кстати, тут есть нюанс. Если тебе действительно нужен полноценный интерфейс ОС (текстовые поля, списки-деревья, модальные диалоговые окна, etc.), то в первую очередь придется определиться чем ты будешь делать их. Я имею в виду — WinAPI/упаси-боже-MFC/Windows.Forms/WPF/WxWidgets/GTK+/etc. Именно оконный интерфейс будет устанавливать самые жесткие ограничения; куда, когда и какую графику ты сможешь выводить тоже им будет диктоваться.
Барионикс 0.5.3a
Модератор: Maelstrom
Re: Барионикс 0.5.3a
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Барионикс 0.5.3a
Ну, справедливости ради, следующим же абзацем я как раз пишу про то, что это вредно и не надо так делать. Впрочем, интерфейс в мультимедиа — это всегда головная боль, как ни старайся.alexbard писал(а):Зачем формы, впф и прочее работающее на откровенных костылях в игровом приложении? Ведь есть же прекрасные реализации уже заточенные под конкретный движок. Например, под XNA (а не далеко отсюда и MonoGame c его вариативностью платформ) есть отличная open source библиотека Neoforce... да и не одна она.
По поводу XNA я, наверное, все-таки минусую. Вероятно, это еще норм, если разработчик хорошо ориентируется в теме и проект есть прямо сейчас, как это в твоем случае. Но XNA прекращен год с четвертью назад, neoforce примерно тогда же. Понятное дело, что ПО не гниет со временем, но в свете косвенного пожелания научиться чему-то актуальному и, в общем-то, не слишком шустрого цикла релизов Baryonix, я бы XNA рекомендовать не стал. Предвосхищая аргумент, что SDL и иже с ними тоже не свежачки, должен заметить, что подобные библиотеки вынуждают практиковать более низкоуровневый и менее завязанный на конкретную платформу подход (код на SDL еще весь .NET переживет, лол).
Пытается раскуклиться
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Барионикс 0.5.3a
Ну, никто ведь не запрещает SDL2 использовать, который для компиляции Tome требовался пол года назад (что сейчас требуется - не смотрел, но, подозреваю, что никаких довнгрейдов небыло). а то что SDL всех переживет, думаю однозначно фактCfyz писал(а):Предвосхищая аргумент, что SDL и иже с ними тоже не свежачки, должен заметить, что подобные библиотеки вынуждают практиковать более низкоуровневый и менее завязанный на конкретную платформу подход (код на SDL еще весь .NET переживет, лол).
@Cfyz - кстати, тот глюк в gcc с мультитреадом при статической линковке, это всегда?, или только под виндой? и ссылочку плз, где можно где подробней почитать? (просто так сходу не находится).
Меня окружали милые, добрые люди... медленно сжимая кольцо
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Барионикс 0.5.3a
Uvadzucumi, так как GCC не всех тут заинтересует, да и треду не соответствует, ответил в личку.
Пытается раскуклиться
Re: Барионикс 0.5.3a
MonoGame же! активно себе развивается, охватывает кучу платформ и пытается закрыть собой брешь, открытую очередной глупостью мелкомягких) время для перехода с xna минимально.Cfyz писал(а):Но XNA прекращен год с четвертью назад, neoforce примерно тогда же. Понятное дело, что ПО не гниет со временем, но в свете косвенного пожелания научиться чему-то актуальному и, в общем-то, не слишком шустрого цикла релизов Baryonix, я бы XNA рекомендовать не стал.
ps но если вопрос стоит об актуальности, то выбирать надо Unity
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Барионикс 0.5.3a
что такое "более-менее сложный вывод текста"метрики для более-менее сложного вывода текста нужно тоже самому хранить и учитывать
Мне для текста нужен от силы автоперенос и раскрашивание произвольной части текста в произвольный цвет.
Лепить окна не собираюсь, всё в одном будет.
Айв кнгенгах Йог-Сотот
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Барионикс 0.5.3a
ничего этого, разумеется в SDL нету. а что конкретно под переносом понимается? по буквам, слогам, словам?Maelstrom писал(а):Мне для текста нужен от силы автоперенос и раскрашивание произвольной части текста в произвольный цвет.
так же, скорее всего, кроме цвета захочется курсив и жирность (а это уже совсем другие глифы, считай текстуры), захочется, наверное подчеркивание? выравнивание различного вида? возможно изменение части текста? или всего текста на каждом кадре (выводить фпс например) - обычно ничего это не реализовано и нужно самому делать, так как это уже ворд получиться...
т.е. автоперенос только в том случае, если текст встречается с правой границей экрана? и только тогда переносится на новую строку к левой границе? только так? если нет, то это уже окна...Maelstrom писал(а):Лепить окна не собираюсь, всё в одном будет.
на самом деле нюансов много. особенно если не моноширное и хочется utf-8 с произвольной кучей символов, возможно еще автоперенос по слогам.
Меня окружали милые, добрые люди... медленно сжимая кольцо
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Барионикс 0.5.3a
Угу, не моноширинное и чтобы не вылезала из заданных границ, то есть перенос внутри области. Перенос по словам.
СДЛ всё же пощупаю ради интереса, может сам придумаю как запилить там это.
Ещё из нерешённых вопросов: как можно сделать замирание программы на <ещё>? Для меня это принципально, хочется такую фичу. Для тех, кто не помнит - если сообщений за раз слишком много, либо произошло что-то ключевое и требует внимания игрока, то он должен нажать пробел чтобы ход пошел дальше. То есть на это время весь обсчет механики игры останавливается.
СДЛ всё же пощупаю ради интереса, может сам придумаю как запилить там это.
Ещё из нерешённых вопросов: как можно сделать замирание программы на <ещё>? Для меня это принципально, хочется такую фичу. Для тех, кто не помнит - если сообщений за раз слишком много, либо произошло что-то ключевое и требует внимания игрока, то он должен нажать пробел чтобы ход пошел дальше. То есть на это время весь обсчет механики игры останавливается.
Айв кнгенгах Йог-Сотот
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Барионикс 0.5.3a
Это значит многострочный вывод немоноширинного текста с кернингом в заданной области. Для того, чтобы правильно посчитать положение каждой буквы придется учитывать индивидуальные каждому глифу расстояния по всем четырем направлениям от него.Maelstrom писал(а):что такое "более-менее сложный вывод текста"
Это архитектурная проблема. В досе-терминале можно было просто зависнуть на ожидании клавиши прямо посередине цикла обработки, но в графическом тебе придется придумать способ обработать ход не до конца и продолжить позже.Maelstrom писал(а):Ещё из нерешённых вопросов: как можно сделать замирание программы на <ещё>? Для меня это принципально, хочется такую фичу. Для тех, кто не помнит - если сообщений за раз слишком много, либо произошло что-то ключевое и требует внимания игрока, то он должен нажать пробел чтобы ход пошел дальше. То есть на это время весь обсчет механики игры останавливается.
Например, очередь "действий". Скажем, игрок нажимает [1], что должно привести к выполнению [A], , и [C]. А [C], в свою очередь (например, это реакция со стороны монстра), провоцирует выполнение [D] и [E]. Тогда в (положим, изначально пустую) очередь сначала ставится [1] и запускается цикл обработки. Первой же итерацией [1] разворачивается в [A], , [C]. Следующей итерацией выполняется [A], но вывода оказывается слишком много и обработка после этого прерывается, в очереди остаются и [C]. После некоторой реакции пользователя, при следующем вызове, обрабатывается ; [C] разворачивается в [D] и [E]; [D], возможно еще во что-то; в процессе опять много вывода, обработка опять прерывается в произвольных местах и т. д. и т. п. Когда в очереди ничего не осталось, обработка хода завершена и можно снова принимать от пользователя команды сложнее <далее> или <закрыть все к чертям>.
Пытается раскуклиться
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Барионикс 0.5.3a
В ВБ я зависание в ожидании кнопок и сделал, а тут... Блин, прийдётся что-то придумывать.
Айв кнгенгах Йог-Сотот
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Барионикс 0.5.3a
Есть еще альтернативный вариант, MVC. Ввод (controller) и отрисовка (view) работают отдельно от обсчета мира (model), в разных потоках. В этом случае тормозить процесс обсчета можно где и когда угодно, но синхронизация данных может оказаться большой головной болью.
Пытается раскуклиться
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Барионикс 0.5.3a
А вот это вот совсем не нравится. То есть прийдётся вручную высчитывать все эти расстояния, или при каком-то преобразовании программа это сама будет знать?Это значит многострочный вывод немоноширинного текста с кернингом в заданной области. Для того, чтобы правильно посчитать положение каждой буквы придется учитывать индивидуальные каждому глифу расстояния по всем четырем направлениям от него.
Айв кнгенгах Йог-Сотот
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Барионикс 0.5.3a
у меня это реализовано в теме viewtopic.php?f=7&t=847 лежит с исходниками на гитхабе.Maelstrom писал(а):А вот это вот совсем не нравится. То есть прийдётся вручную высчитывать все эти расстояния, или при каком-то преобразовании программа это сама будет знать?Это значит многострочный вывод немоноширинного текста с кернингом в заданной области. Для того, чтобы правильно посчитать положение каждой буквы придется учитывать индивидуальные каждому глифу расстояния по всем четырем направлениям от него.
из реализованного на данный момент по тексту:
немоноширный (или моноширный) utf-8 (предварительно сгенерированный атлас при помощи UBFG);
ввывод строк текста со скролом и переносом по словам в заданную область
задание цвета символов при помощи управляющих кодов, например: "тут немного ^ff0000красного^ffffff текста"
если интересно - ткну в место в исходниках, где там конкретно что.
писалось правда за пару часов в течении 2-х вечеров, просто чтобы было, и не тестировалось - просто проверена работоспособность. рендер - OpenGL, из оптимизации - дисплейные списки только. хотя можно запросто переделать и совсем без OpenGL и всяких оптимизаций
ну тут совсем не обяхательно считать все в разных потоках и что то синхронизировать. простейший случай:Cfyz писал(а):Есть еще альтернативный вариант, MVC. Ввод (controller) и отрисовка (view) работают отдельно от обсчета мира (model), в разных потоках. В этом случае тормозить процесс обсчета можно где и когда угодно, но синхронизация данных может оказаться большой головной болью.
Скрытый текст: ПОКАЗАТЬ
Меня окружали милые, добрые люди... медленно сжимая кольцо
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Барионикс 0.5.3a
Честно говоря, не понял что за "какие-то преобразования" и "сама знать" ты имеешь в виду. Тут смотри какое дело: растеризованный глиф — это просто прямоугольная картинка. Однако сам глиф — сложной формы фигура. У него есть некоторая базовая линия, та самая "линия строки", на которой сидят буквы. Глиф может быть произвольной высоты и нужно помнить насколько выше этой базовой линии надо начинать рисовать растеризованную картинку, чтоб буква вышла на одном уровне с остальными. У глифа есть ширина, которая совешенно необязательно равна ширине растеризованной картинки. У глифов есть кернинг, без которого пары типа AV и FA могут выглядеть просто ужасно (а могут и не выглядеть, от шрифта зависит). Еще у шрифта есть метрики выступов выше и ниже базовой линии, которые неплохо учитывать при многострочном выводе. И которые обязательно придется учитывать при оценке размеров надписи. И так далее, в зависимости от того, насколько ты готов удариться в типографию. Более-менее подробно можно почитать в документации библиотеки FreeType, благо это стандарт де-факто низкоуровневой работы со шрифтами.Maelstrom писал(а):А вот это вот совсем не нравится. То есть прийдётся вручную высчитывать все эти расстояния, или при каком-то преобразовании программа это сама будет знать?
Эти параметры придется учитывать (в основном складывать) при самом выводе и при вычислении размеров надписи. Можно хитрить и упрощать. Например, растеризовать глифы в прямоугольники заведомо большего размера, выравнивая базовую линию на стадии генерации. Выбрать шрифт попроще, забить на кернинг. Взять вообще моноширинный. Но если хочентся хорошего, красивого текста, придется хранить и считать целую таблицу атрибутов.
Шиш с маслом =) Вся соль заключается в том, что текста в логе может стать больше допустимого еще в процессе обсчета мира. В одной функции. Вызываемой между некоторым case и его break. И если у тебя один поток, то ты не сможешь одновременно:Uvadzucumi писал(а):ну тут совсем не обяхательно считать все в разных потоках и что то синхронизировать. простейший случай:
1. И не вернуться из начатой, но неоконченной функции обсчета, повиснув в ней на ожидании разрешения двигаться дальше и выводить новые сообщения в лог;
2. И перейти к циклу обработки UI, чтобы получить то самое разрешение от пользователя.
Поэтому вариантов ровно два. Или из функции выходим (например, сохраняя состояние в очереди для дальнейшего возобновления), или делаем все честно параллельно.
Пытается раскуклиться
- Uvadzucumi
- Сообщения: 365
- Зарегистрирован: 29 ноя 2011, 07:13
- Откуда: Дубай, ОАЭ (Минск, Беларусь)
- Контактная информация:
Re: Барионикс 0.5.3a
да. но есть 3-й вариант (если предполагается что одно действие может дикую портянку текста нагенерировать, а такое в принципе возможно, если там 500х500 заруб в экране, и в интерфейсе игры для него всего 2 строчки). можно малой кровью сделать окно лога, отдельным экраном и с прокруткой. несколько хуже будет этот вариант - если строчек всего 1-3 видно на основном экране, а действие 10 нагенерировало, но зато, не нужно 250 раз жать на пробел при одном ходе, если строчек 500 нагенерировало. если нужно - окрыли лог и посмотрели. не нужно - сразу другой ход делаем - а не давим все время далее, пока "неожиданно", нажали вместо "далее", "пропустить следующий ход".Cfyz писал(а):Поэтому вариантов ровно два. Или из функции выходим (например, сохраняя состояние в очереди для дальнейшего возобновления), или делаем все честно параллельно.
Меня окружали милые, добрые люди... медленно сжимая кольцо
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 20 гостей