CEGUI In Practice / CEGUI на практике: 2. Creating widgets
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
С возвращением. Вот и второй туториал из серии CEGUI на практике. proVIDec 03.06.12 в 11:40 |
|
|
Мы будем основываться на знаниях, полученных в предыдущей главе - Введение. proVIDec 03.06.12 в 11:41 |
||
|
Я покажу, как создавать объекты и управлять ими. proVIDec 03.06.12 в 11:46 |
||
|
Объекты proVIDec 03.06.12 в 11:47 |
||
|
В предыдущей главе вы узнали, как настроить систему под Ogre, и немного познакомились со скриптами в CEGUI. proVIDec 03.06.12 в 11:49 |
||
|
Теперь вы должны понять что такое объекты и научиться использовать их. proVIDec 03.06.12 в 12:05 |
||
|
Давайте начнем и создадим окно с картинкой посередине экрана: proVIDec 03.06.12 в 12:07 |
||
|
Для создания окон CEGUI использует большую иерархию классов. proVIDec 05.06.12 в 09:04 |
||
|
Основной класс CEGUI::Window - это обычное окно, CEGUI::WindowManager, когда создает окно, вызывает специальный класс, который возвращает указатель на окно. proVIDec 05.06.12 в 06:48 |
||
|
Первый аргумент, "TaharezLook/StaticImage", обозначает тип окна. proVIDec 05.06.12 в 06:49 |
||
|
Такие окна определенны в схеме, которая в свою очередь базируется на других .xml файлах, описанных еще подробней. proVIDec 03.06.12 в 13:53 |
||
|
Второй аргумент это имя окна. proVIDec 03.06.12 в 13:54 |
||
|
[Примечание: Стоит заметить, что нет особых ограничений на именование окон, за исключением того, что нужно избегать повторения имен. Некоторые пользователи предпочитают давать имена своим окнам, используя структуру ИмяРодителя/ИмяРебенка. То есть что-то вроде "ConsoleWindow/SendButton" или "_MasterRoot/HealthBar".] proVIDec 05.06.12 в 06:53 |
||
|
Как только мы создали окно, myImageWindow стал указателем на CEGUI::DefaultWindow, который произошел от CEGUI::Window. proVIDec 05.06.12 в 07:18 |
||
|
Если посмотрите в .scheme файл, то увидите у какого объекта какой родитель, смотрите TargetType. proVIDec 05.06.12 в 09:01 |
||
|
Дальше нам нужно установить несколько параметров для нашего окна. proVIDec 05.06.12 в 06:56 |
||
|
Есть два способа сделать это. proVIDec 04.06.12 в 07:27 |
||
|
Первый - с помощью propertyset, а второй - вызовом функции. proVIDec 05.06.12 в 09:05 |
||
|
Последний способ может быть более неудобным, так как вам придется присваивать окну нужный тип, получать доступ к функции, однако этот способ более гибкий. proVIDec 05.06.12 в 07:15 |
||
|
Единая система измерений proVIDec 05.06.12 в 07:15 |
||
|
Мы создали наш объект, теперь нам нужно позиционировать его и задать размер. proVIDec 05.06.12 в 06:59 |
||
|
Мы же сделаем это с помощью кода, да? ;) proVIDec 05.06.12 в 06:57 |
||
|
Перед тем как углубиться в дебри, нам нужно понять, как CEGUI работает с координатами. proVIDec 05.06.12 в 07:17 |
||
|
CEGUI использует Единую систему измерений. proVIDec 05.06.12 в 07:16 |
||
|
Первое число - это относительная позиция на экране, оно лежит в промежутке [0; 1]. proVIDec 05.06.12 в 07:03 |
||
|
Если мы посмотрим на ось X (проходит слева направо), то UDim(0.5, 0) будет половина пути вдоль экрана без дополнительных пикселей (второй параметр). proVIDec 05.06.12 в 07:20 |
||
|
Udim(0.0, 50) будет начинаться в левой части экрана и +50 пикселей дополнительно. proVIDec 05.06.12 в 07:20 |
||
|
Можно комбинировать параметры. Udim(0.75,10) будет 3/4 пути вдоль экрана и еще +10 пикселей. proVIDec 05.06.12 в 07:21 |
||
|
Точка на экране (или UVector2) получается путем из двух UDim координат: proVIDec 05.06.12 в 07:22 |
||
|
Можете вообразить? CEGUI::Rect состоит из четырех UDim координат: proVIDec 05.06.12 в 07:23 |
||
|
Теперь когда мы знаем, как устроены координаты, давайте поместим наше созданное окно в центр экрана: proVIDec 05.06.12 в 07:25 |
||
|
Объекты на практике proVIDec 05.06.12 в 07:26 |
||
|
setPosition() принимает UVector2, а любой UVector2 состоит из двух Udim (X и Y), который в свою очередь состоит из относительных координат и абсолютных добавочных. proVIDec 05.06.12 в 07:43 |
||
|
Мы переместили наше окно в центр экрана... но CEGUI не знает насколько большим оно должно быть. proVIDec 05.06.12 в 07:44 |
||
|
Давайте установим его размер в 150 на 100 пикселей [Примечание: Я убрал пространства имен для повышения читабельности]: proVIDec 05.06.12 в 07:45 |
||
|
В данном случае мы установили координаты, используя параметр функции с абсолютными координатами. proVIDec 05.06.12 в 07:55 |
||
|
Абсолютные координаты дополняют относительное масштабирование, и в данном случае мы бы не хотели, чтобы размер окна зависел от размеров экрана. proVIDec 05.06.12 в 07:59 |
||
|
Если мы захотим создать заставку, которая бы перекрывала весь экран, то размер должен был бы быть UVector2( UDim(1, 0), UDim(1, 0) ), а позиция в точке UVector2( Udim(0, 0), UDim(0, 0) ). proVIDec 05.06.12 в 08:34 |
||
|
Теперь, когда мы создали окно с нужными размерами, proVIDec 05.06.12 в 08:01 |
||
|
нам нужно сказать ему, какое изображение надо выводить. proVIDec 05.06.12 в 08:02 |
||
|
Это мы и сделаем, используя PropertySet, как показано ниже: proVIDec 05.06.12 в 08:02 |
||
|
Первый аргумент - параметр, который мы хотим установить, а второй - значение параметра. proVIDec 05.06.12 в 08:45 |
||
|
В нашем случае второй аргумент - строка, разбитая на две части. proVIDec 05.06.12 в 08:07 |
||
|
Нам нужно знать какой ImageSet использовать, поэтому он указан в секции "set:". proVIDec 05.06.12 в 08:41 |
||
|
А затем само изображение в секции "image:". proVIDec 05.06.12 в 08:42 |
||
|
В нашем случае, мы хотим отобразить изображение full_image. proVIDec 05.06.12 в 08:42 |
||
|
Список параметров для TaharezLook доступен здесь <i>ссылка</i>. proVIDec 05.06.12 в 08:32 |
||
|
Теперь, когда у нас есть готовое окно, proVIDec 05.06.12 в 08:04 |
||
|
нам нужно привязать его к текущему корневому окну. proVIDec 05.06.12 в 08:04 |
||
|
Теперь мы сможем увидеть наше новое окно. proVIDec 05.06.12 в 08:04 |
