CAST II Game Engine Community

Please login or register.

Login with username, password and session length
Advanced search  

Author Topic: Создаём простую стрелялку. Урок за уроком.  (Read 5075 times)

0 Members and 2 Guests are viewing this topic.

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine

Уроки до этого пока не дошли, но в Dungeon Looter примеры есть. Вообще ничего сложного.
Объекты лучше всего создавать либо клонируя существующие (методом clone()), предварительно настроенные как надо в редакторе.
Либо даже имея пул заранее созданных объектов брать из него и добавлять к сцене. Это актуально, если объектов много и их надо часто "создавать" и "убивать".

Насчет ковыряния - не знаю. Наверное, это имеет смысл, только если участвовать в разработке. Чтобы результат этих "ковыряний" вошел в релиз.
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Про объекты я имел ввиду данамически, в рантайме. Например - респаун моба.
Про ковыряние SDK я имел ввиду, что кто-то ковыряет под себя его, вместо того чтоб наследников сделать.
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine

Насчет урока это к его автору вопрос. Вроде планы продолжать были.
На карте объекты есть во всех демах. Как пример годится?

Те, кто ковыряет, по идее, отмечаются на форуме. Хотя может кто и втихаря что-то делает.:)
StdWindowProc не уверен, что стоит её делать глобальной. Пока можно inherited конструктор вызвать, чтобы она использовалась, а далее можно подумать её инициализацию засунуть, чтобы в потомках не париться.
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Спасибо за ответы... про WS_POPUP совсем из головы вылетело...
Кстати, урок по стрелялке не закночен ведь... Есть пример, в котором на карту размещаетя объект?


PS: ну я наследника и имел ввиду... а есть такие, кто SDK ковыряет?..
Кстати... в AppsInit сделайте функцию StdWindowProc глобальной... если делать оптомка - то нужна.
« Last Edit: March 13, 2011, 10:37:34 AM by Johnson »
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine

Отвечаю:
1) убрать фрейм можно установив у создаваемого окна стиль WS_POPUP;
т.е. вместо
FWindowStyle := WS_OVERLAPPED or WS_CAPTION or WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SIZEBOX or WS_SYSMENU;
пишем
FWindowStyle := WS_POPUP;

Это лучше делать переопределив в наследнике конструктор класса TWin32AppStarter, т.к. изменения в самом классе потеряются при обновлении движка.

По поводу настроек - стартер будет парсить конфигурационный файл и командную строку на предмет множества опций. Думаю, найдется место и для такой.

Quote
3) можно ли состыковать две и более карт? Делать одну супер-мега-большую-карту не вижу смысла, лучше подгружать частями (соответственно часями и выгружать).


Любую часть сцены можно сохранить и загрузить в любое время. Для подгрузки в том числе такая возможность и закладывалась. Другое дело, что встроенного механизма, который бы следил за тем, какую часть надо подгружать, а какую уже можно выгружать, пока нет. Так что пока это вручную.

Quote
3) как правильнее сделать туман видимости (от камеры)?

Туман в смысле обычный туман по расстоянию? У материалов есть группа свойств Fog.

Quote
4) каждый вопрос в отдельной теме задавать, или прямо тут постить можно(на будущее)?


Лучше в отдельных темах, т.к. повышается вероятность, что кто-то другой найдет ответы на аналогичные вопросы.

P.S. обращаться можно и админ. Мой ник обычно Mirage.
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Хех... а теперь сам отвечаю на свои вопросы....
2,3) в конструкторе стартера нужно изменить параметры создания окна и вырезать из него лишнее:
Code: [Select]
ScreenX := GetSystemMetrics(SM_CXSCREEN);
  ScreenY := GetSystemMetrics(SM_CYSCREEN);
  if ScreenX = 0 then ScreenX := 640;
  if ScreenY = 0 then ScreenY := 480;
  /// ЕСЛИ БЕЗ РАМКИ
  WinRect := GetRectWH(-4, -30, ScreenX+8, ScreenY+30);
  InitWindowSettings(WindowClass, WinRect);
  FWindowHandle := Windows.CreateWindow(WindowClass.lpszClassName, PChar(AProgramName), FWindowStyle,
                                        WinRect.Left, WinRect.Top, WinRect.Right-WinRect.Left, WinRect.Bottom-WinRect.Top,
                                        0, 0, HInstance, nil);
  R:=CreateRectRgn(4,30,WinRect.Right,WinRect.Bottom);
  SetWindowRgn(FWindowHandle,R,TRUE);
  /// ЕСЛИ БЕЗ РАМКИ

  R:HRGN; кстати


Админ (он же разработчик, я думаю... кстати как можно обращаться?), сделай такой вариант опциональным... 
Такое отображение окна я встретил в игре Lineage II когда ковырялся с настройками. Самому понравилось, всем знакомым тавил - тоже в восторге. Виден пуск и все прочие приблуды, а заменяет собой полноэкранную версию.
« Last Edit: March 13, 2011, 08:52:35 AM by Johnson »
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Потихоньку пытаюсь осваивать... Жаль, времени мало выдается...
Вопрос:
создаю стартер из тела программы напрямую, минуя формы ненужные...
1) как у окна убрать фрейм (bsNone)?
2) вопрос снят.
3) можно ли состыковать две и более карт? Делать одну супер-мега-большую-карту не вижу смысла, лучше подгружать частями (соответственно часями и выгружать).
3) как правильнее сделать туман видимости (от камеры)?


4) каждый вопрос в отдельной теме задавать, или прямо тут постить можно(на будущее)?
« Last Edit: March 13, 2011, 08:28:37 AM by Johnson »
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine

Работа продолжается, однако для полноценного развития нужны разработчики.

Что касается редактора, то если он выдает ошибки, нужно знать в каких именно условиях, чтобы можно было воспроизвести.
У меня он давно не вылетал.

Dungeon Looter давно не компилировал. Время будет -- посмотрю что там.
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Ага, всё отлично теперь...
Вопрос ещё такой - работа над движком продолжается?
И, кстати, поработайте над едитором ещё, слишком часто ошибки и вылеты.


PS: в примере Dungeon Looter тоже проблема. При запуске появляется стартовый фон... Но при старте игры он не пропадает...
« Last Edit: March 04, 2011, 10:42:30 AM by Johnson »
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine

Урок слегка устарел просто. GetPosition/SetPosition были сперва публичными, а после создания урока было решено их скрыть в секции protected.

Решается просто - вместо GetPosition пишется просто Position:
    NewPosition:= Core.Renderer.MainCamera.Position;

С SetPosition тоже все просто - просто присваиваем значение свойству Position:
Core.Renderer.MainCamera.Position := AddVector3s (NewPosition, ScaleVector3s(Core.Renderer.MainCamera.ForwardVector, 2) );

А урок надо бы обновить...
Logged

Johnson

  • Newbie
  • *
  • Posts: 6

Здравствуйте.
Проблема такая - в уроке 4 компилятор ругается:
[DCC Error] Unit1.pas(113): E2362 Cannot access protected symbol TProcessing.GetPosition

на строки:
  NewPosition:= Core.Renderer.MainCamera.GetPosition;
  Core.Renderer.MainCamera.SetPosition( AddVector3s (NewPosition, ScaleVector3s(Core.Renderer.MainCamera.ForwardVector, 2) ));

Сначала подумал, что что-то недопонял, потом скачал Ваш вариант... Та же ошибка. В классе Cast2.TCamera нет методов GetPosition и SetPosition

Что-то не так делаю?
Logged

PetrashEvgant

  • Guest

Уважаемый Baskoff!
      вместо water.cbf поместил я в тело программы файл <default.cbf>, поставляемый с прогой Cast2
      Результат сильно смешнама, если бы не грусть тоска из-за неудачного опыта анимационного зрелища на экране, выразившегося в странных поклонах и растягивании фигуры. Разъясите ошибку, что не так делали, если, кроме смены имени файла ничего не меняли.
Logged

Baskoff

  • Newbie
  • *
  • Posts: 10

Надоело копированием и перетаскиванием уроков заниматься. Продолжение на http://www.cast2.ucoz.ru/
« Last Edit: July 21, 2009, 09:58:01 AM by Baskoff »
Logged

Savoia

  • Newbie
  • *
  • Posts: 2

А еще уроки будут? если да, — то когда, если нет, — то почему.
Logged

Luarvic

  • Newbie
  • *
  • Posts: 33

Отличные уроки! (особенно учитывая что я самостоятельно делал все именно так что касается камеры и кнопок ;D)
Хотелось бы еще узнать как прилепить камеру к какомунить объекту например мешу и двигать меш а камера за ним, тоесть вид от 3-го лица реализовать. Перемещения я сделал а вот с вращениями проблемы.
В 4-м уроке  NewPosition:= Core.Renderer.MainCamera.GetPosition; можно вынести из ифов чтоб было меньше букаф.
Так держать, продолжай!
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: