Готовый перевод CEGUI In Practice / CEGUI на практике: 4. A push button

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «перевод редактируется»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

До следующего раза. Веселого кликанья!

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется

Переведено на Нотабеноиде
http://notabenoid.org/book/29927/102294

Переводчики: proVIDec

Настройки

Готово:

100.00% КП = 1.0