CEGUI In Practice / CEGUI на практике: 6. A Game Console
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Давайте взглянем на то, как их надо зарегистрировать. proVIDec 06.06.12 в 12:53 |
|
|
Ниже приведена функция RegisterHandlers, если вы до этого читали внимательно, то она должна выглядеть знакомо. proVIDec 06.06.12 в 12:55 |
||
|
// Хорошо теперь мы должны зарегистрировать обработчики. Выше мы говорили, нам нужно знать, когда пользователь нажал Enter, и proVIDec 06.06.12 в 13:09 |
||
|
// когда он нажал кнопку "Отправить". Так что нам нужно зарегистрировать оба события. proVIDec 06.06.12 в 13:10 |
||
|
// Сначала давайте зарегистрируем кнопку отправки. Имя нашей кнопки "ConsoleRoot/SendButton", но не забывайте, что мы добавили префикс proVIDec 06.06.12 в 13:20 |
||
|
// ко всем окнам, которые загрузили. Нужно принять это к сведению. proVIDec 06.06.12 в 13:21 |
||
|
// Если вспомните, наша кнопка была типа CEGUI::PushButton, proVIDec 06.06.12 в 13:22 |
||
|
// и мы хотим знать о событии клика по ней (EventClicked). proVIDec 06.06.12 в 13:22 |
||
|
// Какую функцию нужно вызвать, когда кнопка нажата? Помните, что все функции proVIDec 06.06.12 в 13:24 |
||
|
// содержаться внутри (this) класса. proVIDec 06.06.12 в 13:24 |
||
|
// Вызываем функцию Handle_SendButtonPressed, член класса GameConsoleWindow proVIDec 06.06.12 в 13:25 |
||
|
// Используем (this) объект, в котором находимся proVIDec 06.06.12 в 13:26 |
||
|
// Теперь для TextSubmitted мы зарегистрируем событие на поле ввода, на котором должен быть курсор мыши, когда proVIDec 06.06.12 в 13:44 |
||
|
// пользователь нажмет Enter. Я не собираюсь вдаваться в подробности, потому что я думаю, что это будет слишком страшно читать, так что proVIDec 06.06.12 в 13:47 |
+1 | |
|
// лучше просто написать. Вот вызов функции. proVIDec 06.06.12 в 13:48 |
||
|
Последняя строчка выглядит ужасно, но помните, что если вы подключите пространство имен CEGUI, вам не понадобятся все эти префиксы CEGUI:: в коде. proVIDec 06.06.12 в 14:56 |
||
|
Как видите регистрировать события довольно легко. proVIDec 06.06.12 в 14:58 |
||
|
Стоит сказать, что есть больше действий, на которые можно реагировать. proVIDec 06.06.12 в 15:00 |
||
|
Для кнопки можно также зарегистрировать: proVIDec 06.06.12 в 15:00 |
||
|
Зависит от того, какой результат вы хотите получить, и где именно должно отразится действие. proVIDec 06.06.12 в 15:01 |
||
|
Например, оконные элементы обычно реагируют на отпускание мыши, так как пользователь может кликнуть на объект, а потом передумать и отпустить кнопку мыши, предварительно стащив с элемента. proVIDec 06.06.12 в 15:02 |
||
|
Обработчики proVIDec 06.06.12 в 12:55 |
||
|
Теперь, когда мы зарегистрировали события, нам нужно написать функции, которые будут обрабатывать эти события. proVIDec 06.06.12 в 15:03 |
||
|
Нам нужно обработать оба события: TextSubmitted и SendButton. proVIDec 06.06.12 в 15:03 |
||
|
// Следующая строка кода в конкретном примере не нужна, но показать стоит. По сути EventArgs proVIDec 06.06.12 в 18:02 |
||
|
// имеет ограниченное применение. Будет более полезно использовать его с другим типом событий. В данном случае WindowEventArgs proVIDec 06.06.12 в 18:09 |
||
|
// Теперь нам нужно получить текст, который находится в поле ввода. proVIDec 06.06.12 в 17:01 |
||
|
// Когда у нас уже есть строка, нужно послать ее в TextParser proVIDec 06.06.12 в 18:11 |
||
|
// Сейчас, когда мы закончили с текстом, нам нужно позаботится об очистке поля ввода. Это то, чего мы ожидаем proVIDec 06.06.12 в 18:12 |
||
|
// после нажатия Enter proVIDec 06.06.12 в 18:12 |
||
|
Теперь вы должно быть удивлены, почему мы не распарсили текст прямо здесь? proVIDec 06.06.12 в 18:13 |
||
|
Если пользователь нажмет Enter или кнопку отправки, текст в любом случае будет распарсен одинаково. proVIDec 06.06.12 в 18:16 |
||
|
Так зачем писать одно и тоже дважды? proVIDec 06.06.12 в 18:13 |
||
|
Ниже приведен код для обработки нажатия кнопки отправки. proVIDec 06.06.12 в 18:17 |
||
|
Я знаю, только что говорил об одинаковых строках кода, и это выглядит просто поразительно также, как код для функции выше. proVIDec 06.06.12 в 18:19 |
||
|
Но это потому что нам не нужна большая функциональность для кнопки. proVIDec 06.06.12 в 18:19 |
||
|
Мы бы просто могли создать одну функцию для отправки текста, но что если бы мы захотели добавить звук, который бы звучал при нажатии на кнопку? proVIDec 06.06.12 в 18:23 |
||
|
Тогда и нужны две различные функции. proVIDec 06.06.12 в 18:24 |
||
|
Уже достаточно сказано, вот код. proVIDec 06.06.12 в 18:24 |
||
|
Парсинг текста proVIDec 06.06.12 в 18:20 |
||
|
Данная часть будет не о CEGUI, так как это больше техническая часть, касающаяся строк. proVIDec 06.06.12 в 18:26 |
||
|
// Лично я люблю работать с std::string, так что я переконвертирую строку proVIDec 06.06.12 в 18:27 |
||
|
// Убедимся, что строка не пустая proVIDec 06.06.12 в 18:27 |
||
|
// Проверим, что первый символ - символ команды proVIDec 06.06.12 в 18:27 |
||
|
// конвертируем символы команды в строчные proVIDec 06.06.12 в 18:28 |
||
|
// Прикрепим наше "имя" к сообщению, которое отобразим proVIDec 06.06.12 в 18:29 |
