CAST II Game Engine Community

Please login or register.

Login with username, password and session length
Advanced search  

Author Topic: Работа с GUI.  (Read 794 times)

0 Members and 1 Guest are viewing this topic.

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: Работа с GUI.
« Reply #6 on: January 24, 2011, 02:31:20 PM »

Судя по сообщениям, в сцене нет камеры, которая использовалась для для отражений. Это влияет только на отражения. Видимо, сцена демки безжалостно обрезана.

В общем, обновленный движок заливается на сайт сейчас. С GUI проблем быть не должно.

Если что-то все еще вылетает, то надо код проекта смотреть.
Logged

Dobrokoik

  • Newbie
  • *
  • Posts: 3
Re: Работа с GUI.
« Reply #5 on: January 23, 2011, 07:58:16 AM »

Ну если пройтись пошагово то можно увидеть что программа застревает при вызове функции GUIRoot.GetChildByName а конкретнее в StdWindowProc (это там ниже используется), эта функция повторяется несколько раз причем не видно никаких циклов и после чего выдает ошибку, программа вылетает.

В логах последние ~100 строчек имеют вид:
938   (EE)    Item "\Root item\Water\TCamera" not found or not an instance of TItem
1297   (EE)   TRenderPass("WaterPs1.1-1").SetLinkedObjectByIndex: Item "\Root item\Water\TCamera" not found or not an instance of TItem

Причем камера есть и все нормально работает до того момента как вызываю функцию выше.
« Last Edit: January 23, 2011, 08:04:11 AM by Dobrokoik »
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: Работа с GUI.
« Reply #4 on: December 19, 2010, 02:56:05 PM »

1. Это странно, ибо ShowControl() просто ищет контрол с заданным именем, начиная от TGUIRootItem и далее вниз по иерархии. Впрочем, если не найдет, то ошибки не должно быть - просто ничего не сделает. И в лог ничего не пишет.
Какая ошибка возникает и в каком месте?
А в логе ошибок или предупреждений нет?
TEdit -- составной элемент. Помимо самого TEdit у него должен быть дочерний объект класса TLabel, который выводит сам текст. Он создается автоматически, но может быть удален.

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

Спасибо Вам за интерес и добрые слова.:)
Logged

Dobrokoik

  • Newbie
  • *
  • Posts: 3
Re: Работа с GUI.
« Reply #3 on: December 19, 2010, 05:57:36 AM »

Отлично. Спасибо за подробный ответ.
Еще вопросы относительно GUI:

1.Как правильно работать с TEdit? Примеров я не нашел, самому создать не получается.
   В редакторе создаю TEdit по имени CommandBox.
   Сохраняю.
   В программе пишу например ShowControl('CommandBox');  (это через хелпер).
   Запускаю. Получаю ошибку. По видимому он не находит такого итема. В Логах пишет мол нет такого итема. Причем обычный лейбл нормально работает. И это не только ShowConrol, GetText напрмер то же ругается с той же ошибкой. Класс TEdit зарегистрирован. В редакторе шрифты и фон прописаны, галочка визуализации стоит. Не понимаю где ошибка...

2. Что касается редактора. Если создать новый GUIItem и присвоить ему Material то все отлично, видим наш контрол с фоном. Но если его изменить или закрыть редактор и загрузить заново или создать другой контрол то фона мы уже не видим. Причем все прописано и галочки стоят. Работать в принципе можно но не удобно.

P.S Спасибо за хороший движок, ждем новых релизов, удачи вам. ;)
« Last Edit: December 19, 2010, 07:54:35 AM by Dobrokoik »
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: Работа с GUI.
« Reply #2 on: December 16, 2010, 03:14:23 PM »

В гуе сообщения при нажатии должны отправляться сами.
Как оно работает - начнем с начала.
В движке все сообщения построены на классе TMessage (и наследниках) и методе HandleMessage(), который может быть у каждого экземпляра. В описании к классам сообщений я постарался указать когда и куда они отправляются.

Сообщения, создаваемые подсистемой ввода отправляются обработчику ядра движка (куда может прицепиться само приложение), а оттуда, в обработчики всех подсистем, в том числе и GUI.
Последний представлен объектом класса TGUIRootItem, т.е. корневым элементом иерархии GUI контролов. При добавлении в сцену данный класс регистрируется как GUI подсистема.
Получая сообщения ввода он уже преобразует и отправляет их как надо вниз по иерархии, учитывая состояния, фокус и т.п.
Контролы же, получая сообщения ввода, генерируют GUI сообщения, в том числе TGUIClickMsg. GUI сообщения идут в обратном направлении, т.е. вверх по иерархии. Когда (и если) доходят до корневого элемента, он их ретранслирует в обработчик ядра.
К обработчику ядра обычно цепляется пользовательский обработчик (что описано в уроках) и там можно отлавливать эти клики.
В DungeonLooter, собственно, так и делается. OnGUIClick() там упоминается только при вызове его из обработчика сообщений, когда туда приходит TGUIClickMsg.

Что касается TCast2App, то это класс, берущий на себя всякую рутину, типа создания некоторых подсистем, организации логики (но не внешнего вида) работы опций, биндов, стандартных пунктов меню и много чего еще. Использовать его необязательно.
Logged

Dobrokoik

  • Newbie
  • *
  • Posts: 3
Работа с GUI.
« Reply #1 on: December 15, 2010, 10:19:04 AM »

Помоему данная тема плохо освещена. Хотя и то что удалось найти в примерах и на форуме вполне достаточно, но не все вопросы исчерпаны.

В моей игрушке мои роботы уже многое умеют. Гуи работает неплохо, но слегка "костыльно".
Я дописал в ACS отправку сообщения от имени нажатого GUIItem'a. Далее обрабатываю сообщение. Таким образом и работает до сих пор.

Видел в DungeonLooter что-то вроде OnGUIClick (если не ошибаюсь). Я так и не нашел как это реализовано но возможно это от родительского класса TCast2App (хотя я и там ничего не нашел). Так как же мне использовать OnGUIClick если я не использую TCast2App? Я разобрался с основными принципами работы движка, но вот гуи пока плохо понимаю.
Logged
 

+ Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:

Please enter the number 234 in the field: