Gamedev LectureСтатьи

Лекция #23. GUI [Лектор - Sark7] (2 стр)

Автор:

[14:21] <_Anubis_> про критику - расскажи еще про граббинг
[14:22] <Sark7> граббинг?
[14:22] <_Anubis_> чтобы жмешь кнопку, ведешь мышкой, а остальным пофег в это время
[14:22] <Sark7> да, есть captured control
[14:23] <Sark7> в Window
[14:23] <_Anubis_> чтобы выскочило у тебя модальное окошко - граббинг всех контролов слетел, и передался окошку
[14:23] <Sark7> не очень понимаю что куда слетело
[14:23] <Sark7> граббинг скидывается при изменении модальности
[14:24] <Sark7> даже не в том дело что скидывается
[14:24] <Sark7> а в том что captured control - св-во окна
[14:25] <Sark7> и соответственно у нового (появившегося) свой captured
[14:25] <_Anubis_> это понятно
[14:25] <_Anubis_> но если бы не скидывался
[14:25] <_Anubis_> то у тя потом, после закрытия месадж-бокса
[14:25] <_Anubis_> висела бы нажатая кнопка %)
[14:25] <Sark7> да

[14:23] <afkos> _Anubis_, Sark7 т.е. сообщения посылаются лишь одному окну, первому в списке
[14:24] <Sark7> угу, первому

[14:25] <afkos> а у меня такой вопрос, как осущствляется привязка к событиям уи?
[14:26] <Sark7> через колбеки на boost::function
[14:26] <Sark7> у каждого виджета свой колбек
[14:26] <afkos> тоесть программистом?
[14:26] <Sark7> ну, программистом. ничто не мешает привязывать методы луа
[14:26] <cppg> ненавижу когда бросаются в детали реализации..
[14:26] <cppg> при чем тут буст
[14:27] <Sark7> удобно биндить потому что
[14:27] <Sark7> на самом деле тот пример с калькулятором известный
[14:27] <Sark7> когда можно поставить один колбек на все кнопки
[14:28] <Sark7> с помощью boost::bind closures
[14:28] <Sark7> можно конечно свой написать, да
[14:28] <Sark7> это я просто на форуме видел топег - как сделать события в гуи
[14:28] <Sark7> и чего там только не было...

[14:27] <cppg> аналогично атласинг тоже не при чем, и "виртуализация текстур"
[14:29] <Sark7> атласинг - пример необходимости UIRenderer :)

[14:31] <cppg> а как девелопится ui, кем и где в твоём dream-ui?
[14:32] <Sark7> мной, cppg
[14:32] <Sark7> что неудивительно я думаю
[14:32] <cppg> в какой тулзе?
[14:33] <Sark7> на самом деле, часто в far :)
[14:33] <cppg> в html?
[14:33] <Sark7> и он не dream, а вполне себе работает
[14:33] <cppg> ну я видел
[14:33] <Sark7> нет, сейчас он code-driven
[14:34] <Sark7> мне так проще )

[14:34] <_Anubis_> я кароч еще там спросил, когда вылетел - одна ли иерархия, на рисование, события и т.о.д.
[14:34] <Sark7> иерархия одна, да

[14:34] <_Anubis_> и еще - есть ли скролинг
[14:34] <_Anubis_> там ведь с рисованием надо замарачивацца
[14:36] <Sark7> в скроллинге надо только заморачиваться с отсечением ненужного
[14:37] <_Anubis_> гм.. ну, контрол ниче не знает про то, что его родитель умеет скролицца
[14:37] <_Anubis_> он просит его нарисовать
[14:37] <_Anubis_> в его позишне
[14:38] <Sark7> ну, грубо - setscissor(); draw_childs(); resetscissor()
[14:38] <_Anubis_> это понятно
[14:38] <_Anubis_> это отсечение
[14:38] <_Anubis_> кто сам скролл делает
[14:40] <_Anubis_> Сарк - ну вот смотри
[14:40] <_Anubis_> есть баттон
[14:40] <_Anubis_> он себя рисует
[14:40] <_Anubis_> draw(renderer, myorigin)
[14:40] <_Anubis_> не зная что его родитель его проскроллил вниз на 0.3
[14:41] <Sark7> myorigin.y этого баттона смещен на 0.3
[14:41] <Sark7> родитель и сместил, однако
[14:42] <_Anubis_> то есть родитель сам двигает их туда сюда..
[14:42] <Sark7> ну, можно и так сказать :)

[14:35] <const> гм... а чем гуйчан плох?
[14:35] <_Anubis_> кто?
[14:35] <const> guichan
[14:35] <const> граф либа для UI
[14:36] <cppg> цегуй наше фсйо
[14:36] <_Anubis_> ээ... ну, сейчас вроде обсуждаецца не хорошесть какой-то либы, а свое написаное :)
[14:36] <const> я о том и спрашиваю
[14:36] <const> зачем писать свое?
[14:37] <const> в любой документации на софт есть раздел - существующие решения
[14:37] <Sark7> const, вот есть прекрасная игра fallout, зачем ты с кваксом пишешь свою? )
[14:37] <const> не, игра - это конечный продукт
[14:37] <const> а либа - это инструмент
[14:38] <cppg> вы шо, ниатличаете middleware от игры?

[14:43] <_Anubis_> а там общие скажем такие фишки, как то что в месадж боксе жмем ентер - и у нас ОК нажимаеццо, жмем Ескейп - у нас Кансел нажимаеццо - это в хендлере KeyEvent'а для MessageBox'а конкретного прописываеццо?
[14:44] <Sark7> ну, раз у нас есть event sinking, делается это легко )
[14:45] <Sark7> да, в KeyEvent
[14:45] <_Anubis_> ну есть ведь общий MessageBox, он не знает грубо говоря, что на него налеплено..
[14:46] <Sark7> ну, сделай стиль CONTROL_STYLE_DEFAULT, и пусть мессадж бокс при ентере ищет буттон с таким стилем и нажымает его

[14:45] <_Anubis_> то есть хендлеры вешаюцца контролам на Mouse, Key, Command?
[14:46] <Sark7> не вешаются, а оверрайдят. это виртуальные фуцкции - bool on(MouseEvent)...
[14:47] <_Anubis_> то есть нельзя повесить Месадж Боксу..
[14:47] <_Anubis_> а можно только отнаследовать
[14:47] <Sark7> ну, есть колбеки onMouse, onKey etc
[14:48] <Sark7> стандартные
[14:48] <_Anubis_> а, ну о них и речь.. угу

[14:46] <_Anubis_> Вопщем круто, у меня так же фсе, только без Command и без UIRenderer'а сделано %) И однооконно еще, да..
[14:48] <_Anubis_> тока я там с граббингом что-то замутил кошмарное, и фокусами контролов еще %)
[14:49] <_Anubis_> типа, в каждом контейнере может быть свой фокусед итем на данный момент.. правда не помню нафига это надо было :)
[14:49] <Sark7> а у тебя кроме кнопок были виджеты какие-то? :)
[14:50] <_Anubis_> да у меня все было в общем-то..
[14:50] <_Anubis_> едит-боксы, чекд-боксы, радио-боксы
[14:50] <_Anubis_> скроллинга вот не было
[14:50] <_Anubis_> всякие прогресс-бары, хрень какая-то..
[14:51] * Sark7 наверное видел раннюю альфа версию
[14:51] <_Anubis_> муверы еще были :) типа, контрол за который можно таскать контейнеры :)
[14:51] <_Anubis_> наверно, да.. у меня под этот гуи еще редактор был написан, на нем самом :)
[14:51] <_Anubis_> потом в нем редактор карт и моделей для стратегии нарисованы :)
[14:52] <_Anubis_> http://community.livejournal.com/a_team_ent/1627.html - вон как красиво
[14:52] <_Anubis_> и даже скролинг текста в едит-боксах пахал %)

Страницы: 1 2

26 апреля 2006

Комментарии [21]