Готовый перевод CEGUI In Practice / CEGUI на практике: 2. Creating widgets
С возвращением. Вот и второй туториал из серии CEGUI на практике.
Мы будем основываться на знаниях, полученных в предыдущей главе - Введение.
Я покажу, как создавать объекты и управлять ими.
Объекты
В предыдущей главе вы узнали, как настроить систему под Ogre, и немного познакомились со скриптами в CEGUI.
Теперь вы должны понять что такое объекты и научиться использовать их.
Давайте начнем и создадим окно с картинкой посередине экрана:
Для создания окон CEGUI использует большую иерархию классов.
Основной класс CEGUI::Window - это обычное окно, CEGUI::WindowManager, когда создает окно, вызывает специальный класс, который возвращает указатель на окно.
Первый аргумент, "TaharezLook/StaticImage", обозначает тип окна.
Такие окна определенны в схеме, которая в свою очередь базируется на других .xml файлах, описанных еще подробней.
Второй аргумент это имя окна.
[Примечание: Стоит заметить, что нет особых ограничений на именование окон, за исключением того, что нужно избегать повторения имен. Некоторые пользователи предпочитают давать имена своим окнам, используя структуру ИмяРодителя/ИмяРебенка. То есть что-то вроде "ConsoleWindow/SendButton" или "_MasterRoot/HealthBar".]
Как только мы создали окно, myImageWindow стал указателем на CEGUI::DefaultWindow, который произошел от CEGUI::Window.
Если посмотрите в .scheme файл, то увидите у какого объекта какой родитель, смотрите TargetType.
Дальше нам нужно установить несколько параметров для нашего окна.
Есть два способа сделать это.
Первый - с помощью propertyset, а второй - вызовом функции.
Последний способ может быть более неудобным, так как вам придется присваивать окну нужный тип, получать доступ к функции, однако этот способ более гибкий.
Единая система измерений
Мы создали наш объект, теперь нам нужно позиционировать его и задать размер.
Мы же сделаем это с помощью кода, да? ;)
Перед тем как углубиться в дебри, нам нужно понять, как CEGUI работает с координатами.
CEGUI использует Единую систему измерений.
Первое число - это относительная позиция на экране, оно лежит в промежутке [0; 1].
Если мы посмотрим на ось X (проходит слева направо), то UDim(0.5, 0) будет половина пути вдоль экрана без дополнительных пикселей (второй параметр).
Udim(0.0, 50) будет начинаться в левой части экрана и +50 пикселей дополнительно.
Можно комбинировать параметры. Udim(0.75,10) будет 3/4 пути вдоль экрана и еще +10 пикселей.
Точка на экране (или UVector2) получается путем из двух UDim координат:
Можете вообразить? CEGUI::Rect состоит из четырех UDim координат:
Теперь когда мы знаем, как устроены координаты, давайте поместим наше созданное окно в центр экрана:
Объекты на практике
Может выглядеть немного страшновато, но не стоит боятся.
setPosition() принимает UVector2, а любой UVector2 состоит из двух Udim (X и Y), который в свою очередь состоит из относительных координат и абсолютных добавочных.
Мы переместили наше окно в центр экрана... но CEGUI не знает насколько большим оно должно быть.
Давайте установим его размер в 150 на 100 пикселей [Примечание: Я убрал пространства имен для повышения читабельности]:
В данном случае мы установили координаты, используя параметр функции с абсолютными координатами.
Абсолютные координаты дополняют относительное масштабирование, и в данном случае мы бы не хотели, чтобы размер окна зависел от размеров экрана.
Если мы захотим создать заставку, которая бы перекрывала весь экран, то размер должен был бы быть UVector2( UDim(1, 0), UDim(1, 0) ), а позиция в точке UVector2( Udim(0, 0), UDim(0, 0) ).
Теперь, когда мы создали окно с нужными размерами,
нам нужно сказать ему, какое изображение надо выводить.
Это мы и сделаем, используя PropertySet, как показано ниже:
Первый аргумент - параметр, который мы хотим установить, а второй - значение параметра.
В нашем случае второй аргумент - строка, разбитая на две части.
Нам нужно знать какой ImageSet использовать, поэтому он указан в секции "set:".
А затем само изображение в секции "image:".
В нашем случае, мы хотим отобразить изображение full_image.
Список параметров для TaharezLook доступен здесь <i>ссылка</i>.
Теперь, когда у нас есть готовое окно,
нам нужно привязать его к текущему корневому окну.
Теперь мы сможем увидеть наше новое окно.
Заключение
В этом небольшом туториале мы кратко ознакомились с использованием PropertySet и немного поговорили о том, как работает Единая система измерений в CEGUI.
Теперь мы начали понимать, как использовать некоторые возможности CEGUI, пока и не функциональные.
В следующий раз мы добавим немного интерактива в эти штуки.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется
Переведено на Нотабеноиде
http://notabenoid.org/book/29927/101898
Переводчики: proVIDec
Настройки
Готово:
