CEGUI In Practice / CEGUI на практике: 2. Creating widgets

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

С возвращением. Вот и второй туториал из серии CEGUI на практике.

proVIDec 03.06.12 в 11:40

0

Мы будем основываться на знаниях, полученных в предыдущей главе - Введение.

proVIDec 03.06.12 в 11:41

0

Я покажу, как создавать объекты и управлять ими.

proVIDec 03.06.12 в 11:46

0

Объекты

proVIDec 03.06.12 в 11:47

0

В предыдущей главе вы узнали, как настроить систему под Ogre, и немного познакомились со скриптами в CEGUI.

proVIDec 03.06.12 в 11:49

0

Теперь вы должны понять что такое объекты и научиться использовать их.

proVIDec 03.06.12 в 12:05

0

Давайте начнем и создадим окно с картинкой посередине экрана:

proVIDec 03.06.12 в 12:07

0

Для создания окон CEGUI использует большую иерархию классов.

proVIDec 05.06.12 в 09:04

0

Основной класс CEGUI::Window - это обычное окно, CEGUI::WindowManager, когда создает окно, вызывает специальный класс, который возвращает указатель на окно.

proVIDec 05.06.12 в 06:48

0

Первый аргумент, "TaharezLook/StaticImage", обозначает тип окна.

proVIDec 05.06.12 в 06:49

0

Такие окна определенны в схеме, которая в свою очередь базируется на других .xml файлах, описанных еще подробней.

proVIDec 03.06.12 в 13:53

0

Второй аргумент это имя окна.

proVIDec 03.06.12 в 13:54

0

[Примечание: Стоит заметить, что нет особых ограничений на именование окон, за исключением того, что нужно избегать повторения имен. Некоторые пользователи предпочитают давать имена своим окнам, используя структуру ИмяРодителя/ИмяРебенка. То есть что-то вроде "ConsoleWindow/SendButton" или "_MasterRoot/HealthBar".]

proVIDec 05.06.12 в 06:53

0

Как только мы создали окно, myImageWindow стал указателем на CEGUI::DefaultWindow, который произошел от CEGUI::Window.

proVIDec 05.06.12 в 07:18

0

Если посмотрите в .scheme файл, то увидите у какого объекта какой родитель, смотрите TargetType.

proVIDec 05.06.12 в 09:01

0

Дальше нам нужно установить несколько параметров для нашего окна.

proVIDec 05.06.12 в 06:56

0

Есть два способа сделать это.

proVIDec 04.06.12 в 07:27

0

Первый - с помощью propertyset, а второй - вызовом функции.

proVIDec 05.06.12 в 09:05

0

Последний способ может быть более неудобным, так как вам придется присваивать окну нужный тип, получать доступ к функции, однако этот способ более гибкий.

proVIDec 05.06.12 в 07:15

0

Единая система измерений

proVIDec 05.06.12 в 07:15

0

Мы создали наш объект, теперь нам нужно позиционировать его и задать размер.

proVIDec 05.06.12 в 06:59

0

Мы же сделаем это с помощью кода, да? ;)

proVIDec 05.06.12 в 06:57

0

Перед тем как углубиться в дебри, нам нужно понять, как CEGUI работает с координатами.

proVIDec 05.06.12 в 07:17

0

CEGUI использует Единую систему измерений.

proVIDec 05.06.12 в 07:16

0

Первое число - это относительная позиция на экране, оно лежит в промежутке [0; 1].

proVIDec 05.06.12 в 07:03

0

Если мы посмотрим на ось X (проходит слева направо), то UDim(0.5, 0) будет половина пути вдоль экрана без дополнительных пикселей (второй параметр).

proVIDec 05.06.12 в 07:20

0

Udim(0.0, 50) будет начинаться в левой части экрана и +50 пикселей дополнительно.

proVIDec 05.06.12 в 07:20

0

Можно комбинировать параметры. Udim(0.75,10) будет 3/4 пути вдоль экрана и еще +10 пикселей.

proVIDec 05.06.12 в 07:21

0

Точка на экране (или UVector2) получается путем из двух UDim координат:

proVIDec 05.06.12 в 07:22

0

Можете вообразить? CEGUI::Rect состоит из четырех UDim координат:

proVIDec 05.06.12 в 07:23

0

Теперь когда мы знаем, как устроены координаты, давайте поместим наше созданное окно в центр экрана:

proVIDec 05.06.12 в 07:25

0

Объекты на практике

Может выглядеть немного страшновато, но не стоит боятся.

proVIDec 05.06.12 в 07:26

0

setPosition() принимает UVector2, а любой UVector2 состоит из двух Udim (X и Y), который в свою очередь состоит из относительных координат и абсолютных добавочных.

proVIDec 05.06.12 в 07:43

0

Мы переместили наше окно в центр экрана... но CEGUI не знает насколько большим оно должно быть.

proVIDec 05.06.12 в 07:44

0

Давайте установим его размер в 150 на 100 пикселей [Примечание: Я убрал пространства имен для повышения читабельности]:

proVIDec 05.06.12 в 07:45

0

В данном случае мы установили координаты, используя параметр функции с абсолютными координатами.

proVIDec 05.06.12 в 07:55

0

Абсолютные координаты дополняют относительное масштабирование, и в данном случае мы бы не хотели, чтобы размер окна зависел от размеров экрана.

proVIDec 05.06.12 в 07:59

0

Если мы захотим создать заставку, которая бы перекрывала весь экран, то размер должен был бы быть UVector2( UDim(1, 0), UDim(1, 0) ), а позиция в точке UVector2( Udim(0, 0), UDim(0, 0) ).

proVIDec 05.06.12 в 08:34

0

Теперь, когда мы создали окно с нужными размерами,

proVIDec 05.06.12 в 08:01

0

нам нужно сказать ему, какое изображение надо выводить.

proVIDec 05.06.12 в 08:02

0

Это мы и сделаем, используя PropertySet, как показано ниже:

proVIDec 05.06.12 в 08:02

0

Первый аргумент - параметр, который мы хотим установить, а второй - значение параметра.

proVIDec 05.06.12 в 08:45

0

В нашем случае второй аргумент - строка, разбитая на две части.

proVIDec 05.06.12 в 08:07

0

Нам нужно знать какой ImageSet использовать, поэтому он указан в секции "set:".

proVIDec 05.06.12 в 08:41

0

А затем само изображение в секции "image:".

proVIDec 05.06.12 в 08:42

0

В нашем случае, мы хотим отобразить изображение full_image.

proVIDec 05.06.12 в 08:42

0

Список параметров для TaharezLook доступен здесь <i>ссылка</i>.

proVIDec 05.06.12 в 08:32

0

Теперь, когда у нас есть готовое окно,

proVIDec 05.06.12 в 08:04

0

нам нужно привязать его к текущему корневому окну.

proVIDec 05.06.12 в 08:04

0

Теперь мы сможем увидеть наше новое окно.

proVIDec 05.06.12 в 08:04

0
Минутку...

Следующая страница →