aRpi
угууу..
тогда я сделаю контроллеры сущностям.. сделаю для камеры какойнить FollowController , в него передам указатель на камеру и объект и добавлю камере в список её контроллеров. собсно при апдейте он буит получать позицию и т.д. игрока и выставлять камере новую ориентацию
у меня вот так:
сущности абсолютно все общаются друг с другом при помощи делегатов, камера это тоже сущность, камер может быть несколько
у всех сущностей есть метод "апдейт", даже если он не нужен он все равно есть просто пустой
камера, сама по себе во время апдейта, через делегат, узнаёт позицию сущности и начинает преследовать эту сущность....
в делегате храниться указатель на сущность и указатель на метод от сущности позволяющий узнать позицию этой сущности
L
> 1b StaticForm
> 1ba тут любай статичная гометрия уровня - стены, пол, забор и т.д.
Ура^^!
aRpi
я считаю что камера не должна уметь "следить" за объектом и т.д.
У меня так: есть сущность "человек", есть сущность "камера" сами по себе они отдельны.. камера ни чо не делает, как и в жизни, а есть контроллер - (в жизни - рука) вот контроллер человека (рука) и юзает камеру.. кактотак : ) остальные взаимосвязи решено заскриптовать на LUA
iGod
> Ура^^!
ага \(^_^)/
таак. Вопрос по LUA.
Вот есть у меня класс LifeAI
у него есть методы
public AIPipe CreateAiPipe(...);
public bool PushGoal(sting pipeName, string goal);
я могу зарегистрировать функции CreateAiPipe и PushGoal в луа и вызывать из скрипта, это просто!
А как сделать чтото вроде нэймспейса? чтобы в скрипте вместо
PushGoal("attackEnemy", "hide");
писать
AI::PushGoal("attackEnemy", "hide");
L
> А как сделать чтото вроде нэймспейса?
Статические функции?
L
> таак. Вопрос по LUA.
> Вот есть у меня класс LifeAI
> у него есть методы
> public AIPipe CreateAiPipe(...);
> public bool PushGoal(sting pipeName, string goal);
>
> я могу зарегистрировать функции CreateAiPipe и PushGoal в луа и вызывать из
> скрипта, это просто!
> А как сделать чтото вроде нэймспейса? чтобы в скрипте вместо
> PushGoal("attackEnemy", "hide");
> писать
> AI::PushGoal("attackEnemy", "hide");
1.
есть такое понятие lua-subclassing, то есть связывание native объектов(методы и переменные) с объектами lua - скрипта
для AI связываете с нативным синглетоном AI, в случае с Entity производится связывание с нативным динамическим объектом.
Существуют различные уже готовые библиотеки, при желании можно написать и свою.
2.
далее в lua средствами языка несложно организовать классы и наследование, создание динамических объектов и синглетонов
L
> далее спорные моменты, которые я не могу решить:
> что есть Entity? Это игрок, триггер, стул.. а стена, она Entity? Я имею
> ввиду обычную стену, которая тупо является Solid объектом и всё! В ней нет
> игровой логики. Она к чему относится? если не она Entity, то что? И в каком
> виде хранить? Хранить в игрвом двиге или достаточно засунуть в физический и
> графический?
существуют простые Entity типа свет, меш, триггер, и.т.д, существуют сложные Entity содержащие в себе другие Entity типа: стул, игрок, дверь
L
> вот я гружу ща Entity класса Player.. Entity player =
> EntityFactory.LoadEntity("блаблабла.xml");
> а как мне стену грузить? она вроде не Entity.. тогда мне её не учитывать в
> игровом двиге?
стены обычно относятся к так называемой статической геометрии уровня(или статика), глобально все стены на уровне порезаны под зоны подзагрузки, во время design time производится preprocess level, который учитывает зоны видимости, нарезает на DIP`ы, строит Octree и BSP, и многое другое, записывается и затем грузится одним куском.
L
> Ещё: у меня есть класс сцены в граф двиге.. получается мне нужно делать опять
> класс сцены в игровом?
сцен нужно столько сколько нужно, к примеру есть сцена 2D пульта на которым можно нажимать кнопочки, и что то анимируется, и этот пульт стоит в 3D сцене, или вы о чем?
xDimka
> в случае с Entity производится связывание с нативным динамическим объектом.
ты об этом? (я вот так ещё сейчас тестил)
luanet.load_assembly ("LifeGameEngine");
message = luanet.import_type("LifeGameEngine.Message");
mymessage = message();
ShowMessage(mymessage);
HellishShutdown();
а хотелось бы чтото типа
GE = luanet.load_assembly ("LifeGameEngine");
message = luanet.import_type("LifeGameEngine.Message");
mymessage = message();
GE:ShowMessage(mymessage);
HellishShutdown();
xDimka
> далее в lua средствами языка несложно организовать классы и наследование
набросай мегапростой пример, пожалуйста.
вот может я захочу AI вообще забацать чисто на Lua.. как мне сделать класс, добавить методы?
LowPolyMan
> Статические функции?
да, статичные
L
> Эпизод III. It has began...
> Как я себе представляю игровой двиг:
предлагаю вам рассмотреть движок с другой плоскости -
с анализа технологичесого процесса производства игр на этом двиге, от модели и текстур, материалов, анимаций, скриптов, и.т.д в сторонних(своих ?) редакторах -> к реальной игре на двиге, так как эта сторона самая важная в движке нежели сам движок, так как она определяет за сколько времени(считай денег) и проект какого уровня можно на нем будет собрать.
xDimka
ды я себе более-менее уже представляю.. и создание (в своём!) редакторе уровней, сущностей, редактирование материалов, как, в каком виде и где всё хранится и т.д. Уже продумал ИИ.. осталось только сделать. И тем не менее повторюсь:
> > xDimka
> > далее в lua средствами языка несложно организовать классы и наследование
> набросай мегапростой пример, пожалуйста.
> вот может я захочу AI вообще забацать чисто на Lua.. как мне сделать класс,
> добавить методы?
Так, я нашёл как создавать классы, использовать наследование - это мегапросто! : )
Ок, но я не совсем ещё знаком с LUA поэтому спрошу:
у ЛУА есть такой метод: DoFile() через него выполняются скрипты в луа... ок.
Например я хочу создать систему ИИ полностью на LUA. Я создам класс, добавлю методы и т.д. получится дольшая такая система - это будет один скриптовый файл! После того, как он ВЫПОЛНИТСЯ (выполнится инициализация AI) - я смогу этим классом пользоваться? Он остаётся в памяти или после выполнения скрипта выгружается? (я думаю остаётся, но всёже перепроверю)
и да, у кого больше опыта в кодинге под луа... вообще реально создать норм ИИ на нём? Я имею ввиду какие-нибудь ограничения языка (предположим что на C#/C++ я сделаю, смогу ли я сделать на LUA его средствами)
Тема в архиве.