CEGUI In Practice / CEGUI на практике: 4. A push button
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Привет, привет. Хочу сообщить, что вы делаете хорошие успехи. proVIDec 06.06.12 в 03:17 |
|
|
Хорошо, в последней главе мы ознакомились с вводом в CEGUI. proVIDec 06.06.12 в 03:19 |
||
|
Нам это понадобится, так как сегодня мы будем делать кнопку. proVIDec 06.06.12 в 03:19 |
||
|
И не просто какую-нибудь кнопку, а кнопку, которая делает что-то. Я знаю, интригующе. proVIDec 06.06.12 в 03:25 |
||
|
Немного основ proVIDec 06.06.12 в 07:31 |
||
|
Для начала нужно взглянуть на то, как CEGUI управляет событиями. proVIDec 06.06.12 в 06:31 |
||
|
CEGUI использует способ событий и подписчиков. proVIDec 06.06.12 в 06:43 |
||
|
Это означает, что, когда с чем-нибудь (кнопкой, полем для ввода/вывода) происходит событие (щелчок мыши, ввод текста, наведение мыши), чему-то другому (классу приложения, другому объекту CEGUI, чему-угодно) сообщают об этом. proVIDec 06.06.12 в 06:37 |
||
|
На примере это выглядит так: proVIDec 06.06.12 в 06:37 |
||
|
Первый аргумент - это событие, которое вы хотите обработать. proVIDec 06.06.12 в 06:38 |
||
|
События - константные строки. proVIDec 06.06.12 в 06:38 |
||
|
Вы найдете их в соответствующих заголовочных файлах объектов CEGUI (к примеру CEGUIPushButton содержит CEGUI::PushButton::EventClicked). proVIDec 06.06.12 в 06:40 |
||
|
Второй параметр - подписчик, который будет вызываться всегда, когда будет происходить событие. proVIDec 06.06.12 в 06:43 |
||
|
Давайте приведем пример того, как заставить нашего персонажа прыгать всякий раз, когда будет нажиматься кнопка. proVIDec 06.06.12 в 06:45 |
||
|
Для начала, создадим саму кнопку. proVIDec 06.06.12 в 06:45 |
||
|
Хотя это и плохой стиль кодинга, но для простоты понимания мы создадим нашу кнопку в главном цикле программы. proVIDec 06.06.12 в 06:47 |
||
|
Код, приведенный выше, создает кнопку типа "TaharezLook/Button", которая есть в соответствующей схеме. proVIDec 06.06.12 в 06:48 |
||
|
Потом ей дается имя "JumpPushButton", устанавливается размер и задается позиция, и далее она привязывается к корневому окну GUI. proVIDec 06.06.12 в 06:52 |
||
|
Это все было в двух предыдущих туториалах. proVIDec 06.06.12 в 06:52 |
||
|
Однако, функция setText - новая. proVIDec 06.06.12 в 06:53 |
||
|
Я думаю и так понятно, но все же объясню. Она устанавливает текст окна. proVIDec 06.06.12 в 06:53 |
||
|
Кнопки, поля ввода и т.д., у всех есть место, где можно отобразить текст, эта функция его и устанавливает. proVIDec 06.06.12 в 06:55 |
||
|
Теперь, когда мы создали нашу кнопку, давайте создадим класс, который будет получать события кнопки JumpPushButton. proVIDec 06.06.12 в 06:56 |
||
|
Помните, что это только пример. proVIDec 06.06.12 в 06:56 |
||
|
В вашем приложении это не будет выглядеть так просто. proVIDec 06.06.12 в 06:56 |
||
|
Хорошо, довольно маленький класс, да? ;) proVIDec 06.06.12 в 06:57 |
||
|
Я не знаю, как вы будете заставлять кого-то прыгать, это уже ваша забота. proVIDec 06.06.12 в 06:57 |
||
|
Я здесь просто, чтобы показать как взаимодействовать с GUI. proVIDec 06.06.12 в 06:58 |
||
|
Действительно интересная строчка здесь, это функция RegisterForEvents(). proVIDec 06.06.12 в 06:59 |
||
|
Возможно вы встречались с подписчиками событий, возможно нет, так или иначе я очень коротко объясню их суть. proVIDec 06.06.12 в 07:02 |
||
|
По существу, они работают, создавая структуру, которая знает какую функцию вызывать и где взять объект класса, у которого есть эта функция. proVIDec 06.06.12 в 07:13 |
||
|
Первый параметр, &OurPlayer::Jump, сообщает, что мы хотим использовать функцию Jump, которая принадлежит классу OurPlayer. proVIDec 06.06.12 в 07:15 |
||
|
Проблема в том, что подписчик не знает, который объект класса OurPlayer мы хотим использовать. proVIDec 06.06.12 в 07:16 |
||
|
Что если мы играем на раздвоенном экране, и у нас два игрока? proVIDec 06.06.12 в 07:18 |
||
|
Один для левого игрока, другой для правого. Нам следовало бы указать конкретного игрока. proVIDec 06.06.12 в 07:19 |
||
|
За это отвечает второй аргумент. proVIDec 06.06.12 в 07:19 |
||
|
В C++, this возвращает указатель на класс, в котором происходит выполнение. proVIDec 06.06.12 в 07:20 |
||
|
Так что, когда мы зарегистрировали событие внутри класса, мы использовали this, который указывает на класс, в котором была вызвана функция RegisterForEvents(). proVIDec 06.06.12 в 07:22 |
||
|
Если бы мы сделали как ниже: proVIDec 06.06.12 в 07:17 |
||
|
Тогда нужно было бы вызывать функцию так: proVIDec 06.06.12 в 07:17 |
||
|
Как вы можете видеть, события открывают много возможностей. proVIDec 06.06.12 в 07:24 |
||
|
Есть такие события как: щелчок мыши, наведение мыши, отведение мыши, изменение текста, изменение размера. proVIDec 06.06.12 в 07:25 |
||
|
Просто некоторые из них. proVIDec 06.06.12 в 07:26 |
||
|
Это большой список событий для всех типов окон в CEGUIWindow.h. proVIDec 06.06.12 в 07:26 |
||
|
Заключение proVIDec 05.06.12 в 10:58 |
||
|
Надеюсь вы поняли, как устроены события в CEGUI. proVIDec 06.06.12 в 07:27 |
||
|
Они - тот механизм, который отвечает за все происходящие вещи. proVIDec 06.06.12 в 07:32 |
||
|
Как только вы поняли, как использовать события, остальная часть GUI станет легкой для освоения, так как большая часть взаимодействия пользователя с GUI, это события. proVIDec 06.06.12 в 07:30 |
||
|
Пока вы не используете их все. Есть даже события для вращения окон и перетаскивания их друг на друга. proVIDec 06.06.12 в 07:31 |
||
|
Просто подумайте о возможностях. proVIDec 06.06.12 в 07:30 |
