CEGUI In Practice / CEGUI на практике: 4. A push button

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

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

Привет, привет. Хочу сообщить, что вы делаете хорошие успехи.

proVIDec 06.06.12 в 03:17

0

Хорошо, в последней главе мы ознакомились с вводом в CEGUI.

proVIDec 06.06.12 в 03:19

0

Нам это понадобится, так как сегодня мы будем делать кнопку.

proVIDec 06.06.12 в 03:19

0

И не просто какую-нибудь кнопку, а кнопку, которая делает что-то. Я знаю, интригующе.

proVIDec 06.06.12 в 03:25

0

Немного основ

proVIDec 06.06.12 в 07:31

0

Для начала нужно взглянуть на то, как CEGUI управляет событиями.

proVIDec 06.06.12 в 06:31

0

CEGUI использует способ событий и подписчиков.

proVIDec 06.06.12 в 06:43

0

Это означает, что, когда с чем-нибудь (кнопкой, полем для ввода/вывода) происходит событие (щелчок мыши, ввод текста, наведение мыши), чему-то другому (классу приложения, другому объекту CEGUI, чему-угодно) сообщают об этом.

proVIDec 06.06.12 в 06:37

0

На примере это выглядит так:

proVIDec 06.06.12 в 06:37

0

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

proVIDec 06.06.12 в 06:38

0

События - константные строки.

proVIDec 06.06.12 в 06:38

0

Вы найдете их в соответствующих заголовочных файлах объектов CEGUI (к примеру CEGUIPushButton содержит CEGUI::PushButton::EventClicked).

proVIDec 06.06.12 в 06:40

0

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

proVIDec 06.06.12 в 06:43

0

Давайте приведем пример того, как заставить нашего персонажа прыгать всякий раз, когда будет нажиматься кнопка.

proVIDec 06.06.12 в 06:45

0

Для начала, создадим саму кнопку.

proVIDec 06.06.12 в 06:45

0

Хотя это и плохой стиль кодинга, но для простоты понимания мы создадим нашу кнопку в главном цикле программы.

proVIDec 06.06.12 в 06:47

0

Код, приведенный выше, создает кнопку типа "TaharezLook/Button", которая есть в соответствующей схеме.

proVIDec 06.06.12 в 06:48

0

Потом ей дается имя "JumpPushButton", устанавливается размер и задается позиция, и далее она привязывается к корневому окну GUI.

proVIDec 06.06.12 в 06:52

0

Это все было в двух предыдущих туториалах.

proVIDec 06.06.12 в 06:52

0

Однако, функция setText - новая.

proVIDec 06.06.12 в 06:53

0

Я думаю и так понятно, но все же объясню. Она устанавливает текст окна.

proVIDec 06.06.12 в 06:53

0

Кнопки, поля ввода и т.д., у всех есть место, где можно отобразить текст, эта функция его и устанавливает.

proVIDec 06.06.12 в 06:55

0

Теперь, когда мы создали нашу кнопку, давайте создадим класс, который будет получать события кнопки JumpPushButton.

proVIDec 06.06.12 в 06:56

0

Помните, что это только пример.

proVIDec 06.06.12 в 06:56

0

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

proVIDec 06.06.12 в 06:56

0

Хорошо, довольно маленький класс, да? ;)

proVIDec 06.06.12 в 06:57

0

Я не знаю, как вы будете заставлять кого-то прыгать, это уже ваша забота.

proVIDec 06.06.12 в 06:57

0

Я здесь просто, чтобы показать как взаимодействовать с GUI.

proVIDec 06.06.12 в 06:58

0

Действительно интересная строчка здесь, это функция RegisterForEvents().

proVIDec 06.06.12 в 06:59

0

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

proVIDec 06.06.12 в 07:02

0

По существу, они работают, создавая структуру, которая знает какую функцию вызывать и где взять объект класса, у которого есть эта функция.

proVIDec 06.06.12 в 07:13

0

Первый параметр, &OurPlayer::Jump, сообщает, что мы хотим использовать функцию Jump, которая принадлежит классу OurPlayer.

proVIDec 06.06.12 в 07:15

0

Проблема в том, что подписчик не знает, который объект класса OurPlayer мы хотим использовать.

proVIDec 06.06.12 в 07:16

0

Что если мы играем на раздвоенном экране, и у нас два игрока?

proVIDec 06.06.12 в 07:18

0

Один для левого игрока, другой для правого. Нам следовало бы указать конкретного игрока.

proVIDec 06.06.12 в 07:19

0

За это отвечает второй аргумент.

proVIDec 06.06.12 в 07:19

0

В C++, this возвращает указатель на класс, в котором происходит выполнение.

proVIDec 06.06.12 в 07:20

0

Так что, когда мы зарегистрировали событие внутри класса, мы использовали this, который указывает на класс, в котором была вызвана функция RegisterForEvents().

proVIDec 06.06.12 в 07:22

0

Если бы мы сделали как ниже:

proVIDec 06.06.12 в 07:17

0

Тогда нужно было бы вызывать функцию так:

proVIDec 06.06.12 в 07:17

0

Как вы можете видеть, события открывают много возможностей.

proVIDec 06.06.12 в 07:24

0

Есть такие события как: щелчок мыши, наведение мыши, отведение мыши, изменение текста, изменение размера.

proVIDec 06.06.12 в 07:25

0

Просто некоторые из них.

proVIDec 06.06.12 в 07:26

0

Это большой список событий для всех типов окон в CEGUIWindow.h.

proVIDec 06.06.12 в 07:26

0

Заключение

proVIDec 05.06.12 в 10:58

0

Надеюсь вы поняли, как устроены события в CEGUI.

proVIDec 06.06.12 в 07:27

0

Они - тот механизм, который отвечает за все происходящие вещи.

proVIDec 06.06.12 в 07:32

0

Как только вы поняли, как использовать события, остальная часть GUI станет легкой для освоения, так как большая часть взаимодействия пользователя с GUI, это события.

proVIDec 06.06.12 в 07:30

0

Пока вы не используете их все. Есть даже события для вращения окон и перетаскивания их друг на друга.

proVIDec 06.06.12 в 07:31

0

Просто подумайте о возможностях.

proVIDec 06.06.12 в 07:30

0
Минутку...

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