CAST II Game Engine Community

Please login or register.

Login with username, password and session length
Advanced search  

Author Topic: Набор вопросов  (Read 2501 times)

0 Members and 1 Guest are viewing this topic.

ElKornacio

  • Newbie
  • *
  • Posts: 15
Re: Набор вопросов
« Reply #6 on: September 20, 2009, 10:19:45 AM »

Собственно на основах лутера я прогу и делал :) насчёт сцен - ещё посмотрев редактор понял что это не такая пакость как я подумал сначала. много полезных и удобных функций :) багов правда от этого не уменьшилось :( ну да ладно. за TEdit спасибо, щас буду ковырятся)
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: Набор вопросов
« Reply #5 on: September 20, 2009, 09:39:50 AM »

Если решили таки создавать вручную, то тут несколько нюансов:
1. GUI контролы должны создаваться конструктором Construct(), а не Create(), т.к. некоторые (в частности, TEdit) не простые, а составные. Хотя, может и имеет смысл их поменять местами...
2. Parent'a надежнее задать так:
Code: [Select]
Vasya.Parent:=Core.Root.GetChildByName('GUI', True); // GUI - так обычно называется экземпляр TGUIRootItem3. Контролам нужны материалы
Задать можно так:
Code: [Select]
Vasya.SetProperty('Material', '\Root item\Materials\2D');"\Root item\Materials\2D" (не обязательно конечно именно такая иерархия) при этом должен существовать, быть экземпляром TMaterial
4. TEdit контрол составной. Помимо самого TEdit, у него есть дочерний объект класса TLabel (или наследника), представляющий текст, тогда как сам TEdit представляет фон. Тексту материал нужен еще сильнее.:)
Code: [Select]
Vasya.Childs[0].SetProperty('Material', '\Root item\Materials\Font');"\Root item\Materials\Font" должен быть действительно материалом для вывода текста, иначе ничего путного не нарисуется. Т.е. указывать на текстуру с шрифтом и т.д.
5. Контролам с текстом нужно указать шрифт (который тоже должен присутствовать в сцене):
Code: [Select]
Vasya.Childs[0].SetProperty('Font', '\Root item\GUI\SmallFont');6. Надо включить видимость и обработку свежесозданных объектов:
Code: [Select]
Vasya.State := Vasya.State + [isVisible, isProcessing];
Vasya.Childs[0].State := Vasya.Childs[0].State + [isVisible, isProcessing];
Теперь контрол должно быть видно.
7. Ну и наконец, сделаем посылку ему сообщений:
Code: [Select]
Core.CatchAllInput := True;Это заставляет приложение перехватывать все события ввода, а не только последовательности, к которым привязано что-то (посредством TInput.Bind*). А дальше эти события уже пересылаются куда надо.

Да, все перечисленные объекты можно найти в water.cbf из демки Water. Дабы не создавать с нуля.
А еще есть класс TACSHelper, облегчающий работу с GUI и, помимо прочего, включающий логику работы GUI среднестатистической шаровары. В том числе профили игроков.
В Dungeon Looter'е можно посмотреть на её использование.
« Last Edit: September 20, 2009, 09:46:47 AM by admin »
Logged

ElKornacio

  • Newbie
  • *
  • Posts: 15
Re: Набор вопросов
« Reply #4 on: September 20, 2009, 05:46:08 AM »

насчёт GUI:
открываем редактор, стираем всё кроме камеры и GUIRootItem, сейваем, подгружаем в прогу. в проге делаем Vasya:TEdit;
Vasya:=TEdit.Create(Core);
Vasya.Parent:=Core.Root.Childs[1];
Vasya.Width:=100;
Vasya.Height:=30;
Vasya.Text:='text';
потом добавляем в класс OnClick:TNotifyEvent;
а в обработчик сообщений
if (Msg.ClassType=TGUIClickMsg){кажется так, по памяти тип клика не помню} and (Msg.Item=Vasya) then
if Assigned(OnClick) then
OnClick(Self);

и врубаем. видим ошибку на Assigned(OnClick). думаем, ну прога же моя. никто ничего не поменят. сам я OnClick ставлю, а значит он <>nil. стираем Assigned(OnClick). думаем что сейчас всё запашет, включаем, жмакаем, сново видим ошибку, материмся, думаем та ну нафик и идём постить сообщение про неработающий TEdit :)
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: Набор вопросов
« Reply #3 on: September 20, 2009, 04:14:11 AM »

Добро пожаловать, ElKornacio!
Отвечаю по пунктам:
1. Вообще говоря, предполагается, что сцены будут загружаться штатным способом. Что касается опасности несанкционированного доступа к контенту, то несложно добавить шифрование файлов сцен, что, вкупе с уже имеющейся в движке виртуальной машиной (для сокрытия ключа), отобьет охоту до чужого контента.
Штатные средства подразумевают (в будущем) в том числе загрузку ресурсов из отдельных файлов. Т.к. при разработке серьезного проекта будет удобно - сохранил картинку или модель в 3ДМаксе, переключился в редактор, а он уже подгрузил новую.
А вот нештатная загрузка сразу отнимает у движка одну из самых сильных сторон - наличие редактора и вообще т.н. art pipeline.
2. Давно не трогал GUI, но глюков в TEdit не замечал. Можно поподробнее? Тогда будет возможность их исправить в следующем релизе (который уже на подходе, кстати). Потоки в TEdit не используются.
3. О более-менее завершенных проектах мне не известно. Хотя демки передают общий принцип соддания приложений на CAST II.
Logged

ElKornacio

  • Newbie
  • *
  • Posts: 15
Re: Набор вопросов
« Reply #2 on: September 19, 2009, 10:44:35 AM »

Такс. ну чтож, на первый вопрос я решение нашёл, хоть и немного не стандартное. Делюсь с людьми)
(Основной моей целью было поддержать работу ГУИ в нефайловой сцене, так что мб 3д модели она так сразу не прохавоет. если хотите развивать, там не трудно, просто смотрите в редакторе какие поставили объекты и создавайте кодом аналогичные :) )

1. Открываем BaseClasses, ищем там TItemsManager. в самом конце public'а дописываем:
procedure AddProcessingClass(c:TProcessingClass);

А вот и сама процедура(затульте куданить в самом юните):

procedure TItemsManager.AddProcessingClass(c:TProcessingClass);
var
i:integer;
begin
  i:=length(ProcessingClasses);
  SetLength(ProcessingClasses,i+1);
  ProcessingClasses[ i ]:=c;
end;

Сохраняем, возвращаемся к основному.

2. Если вы юзали отдельный класс(как я и человек делавший все демки), то делюсь готовым кодом, в классе метод LoadScene.

function TYouProject.LoadScene:boolean;
var
Item:TItem;
c:TProcessingClass;
begin
  Result:=False;
  Core.ClearItems;
  Item:=TCASTRootItem.Create(Core);
  Core.Root:=Item as TRootItem;
  Item:=TLookAtCamera.Create(Core);
  Core.Root.AddChild(Item);
  c.Interval:=30;
  Core.AddProcessingClass(c);
  TBaseProcessing(Item).ProcessingClass:=0;
  Item:=TGUIRootItem.Create(Core);
  Core.Root.AddChild(Item);
  TBaseProcessing(Item).ProcessingClass:=0;
  Item:=T2DFitter.Create(Core);
  Core.Root.Childs[1].AddChild(Item);
  TBaseProcessing(Item).ProcessingClass:=0;
  Item:=T3DFitter.Create(Core);
  Core.Root.Childs[1].AddChild(Item);
  TBaseProcessing(Item).ProcessingClass:=0;
  {$IFDEF LOGGING}
  Log.Log(ClassName+'.LoadScene: Scene load successful',lkNotice);
  {$ENDIF}
  Core.SendMessage(ItemMsg.TSceneLoadedMsg.Create,nil,[mfBroadcast,mfCore]);
  Result:=True;
end;

3. Что подключать в юзес думаю вы поймёте сами, если не поймёте(уж простите, фильтровать влом было), вот мой юзес:

uses
  SysUtils, TextFile, Basics, AppsInit, OSUtils, WApiMsg,

  Resources, BaseGraph, BaseTypes, BaseMsg, Base3D,
  C2Res, C2VisItems, C2Anim, C22D, C2FX, C2Land, C2TileMaps,
  ACS, ACSAdv, ACSBase, C2GUI, GUIMsg, Dialogs, Windows,
  C2Visual, C2Affectors, C2ParticleAdv, BaseClasses, GUIFitter,
  ItemMsg,

  C2Render, C2DX8Render,
  Input, WInput,
  CAST2, C2Core,
  Timer, GUIManager;
Logged

ElKornacio

  • Newbie
  • *
  • Posts: 15
Набор вопросов
« Reply #1 on: September 19, 2009, 04:14:03 AM »

Здрасте всем. Собственно есть желание сделать проект на движке Cast2, со структурой движка я вроде бы разобрался, но появилось пара проблем)
Оть основные вопросы:
1. Всё построено на загрузке сцен из файла. Ну не хочу я грузить что то из файлов, которые могут раскриптовать и поменять. Попытался делать сам через создание TCASTRootItem и остальных, но встретил слишком много ошибок. Правда я уже понял как их фиксить, но всё же - мб кто то уже делал такое? Там много кода писать, если не сложно, поделитесь..
2. GUI. Есть у ACS такая суровая вещь как TEdit. суровая по причине багов, которыми она меня закидала. Основную причину не нашёл, но летает абсолютно всё, как будто там не слабый косяк с потоками. вопрос: мб кто то фиксил это и/или есть ли альтернативы?)
3. Были ли проекты на Cast2 кроме DungeonLooter? желательно опенсорц.. хотелось бы взглянуть, мб есть какие то более хорошие пути чем те, что использую я)
--
Заранее сенкс за ответы. Жду их с нетерпением)
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: