forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Как лучше управлять объектами в игре? (http://forum.boolean.name/showthread.php?t=5197)

Trilliput 04.12.2007 21:51

Как лучше управлять объектами в игре?
 
Возникла такая проблема:
Как лучше управлять объектами в игре?
1. Через один главный объект. Например класс игрока управляются все объекты в игре: постройка зданий, управление юнитами и тп. Вся обработка действий играющего находиться в нем. Но тогда придется каждый раз дополнительно снова прокручивать листы с объектами для каждого действия что бы проверить, например, что кликнли именно на этом объекте.
2. Все действия обрабатываются в своих классах. Нет проблемы с дополнительным прокручиванием списков. Но возможно дублирование реакции на одни те же действия игрока. Неудобство в плане размытости кода по проекту.

Может кто подскажет в какую сторону двигаться или предложит свою систему управления, типа универсальную.

jimon 04.12.2007 23:51

Re: Как лучше управлять объектами в игре?
 
управление в одном месте
делаем тип TPlayerControler и там все что связано с управлением делаем

внутри типа делаем кешируемые методы типа
GetObjectOnMouse, GetSelectedObjects и тд

потом просто в Update все обновляем и нет проблем

Trilliput 05.12.2007 00:01

Re: Как лучше управлять объектами в игре?
 
Внутри типа TPlayerController делаем кешируемые методы?
Кешируемые методы - объясни подробней, что такое кеш вроде понятно, а что такое кешируемый метод - нет. Правда название намекает на то что там содержаться объекты "под мыхой", "выделенные" и тп.
Например метод GetObjOnMouse - неужели придется пробегаться по списку всех объектов и от этого перебра не уйти?

Или имелось ввиду что метод GetObjOnMouse принадлежит классу TObj? И во время перебора этого класса выявляется объект под мыхой?

Или у меня параноя по поводу перебора списка? :)

jimon 05.12.2007 00:38

Re: Как лучше управлять объектами в игре?
 
вот тебе кривое обьяснение зачем такое надо :)

Код:

Type TBlablabla
....

Field CachedObject:TObject

Method GetCacheFunction:TObject()
if CachedObject = null then CachedObject = GetFunction()
return CachedObject
End Method

Method FreeCacheFunction()
CachedObject = null
End Method

Method GetFunction:TObject()
'в етой функции каким-то образом получаем нужный обьект
..
return obj
End Method

Method Update()

local obj:TObject

obj = GetCacheFunction() 'тут у нас вызывается GetFunction()
obj = GetCacheFunction() 'а тут мы уже берем кешируемое значение
obj = GetCacheFunction() 'тут тоже самое
obj = GetCacheFunction()
obj = GetCacheFunction()

FreeCacheFunction() 'обычно кеш очищают если что-то изменилось
'но для примера будем очищать его в конце обновления

End Method

....

End Type

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

мне такой подход понадобился только внутри TList, пришлось там
несколько функции зделать кешируемыми

хотя я особой оптимизацией игры не занимался, спокойно можно
перебирать все обьекты раз 10 за цикл не особо беспокоясь о производительности

Trilliput 05.12.2007 00:48

Re: Как лучше управлять объектами в игре?
 
В том то и дело что перебирать неочень получается раз по 10 за цикл. Начинаются подтормаживания, из за этого код уже второй раз переписывается (читай оптимизируется). :(

jimon 05.12.2007 01:04

Re: Как лучше управлять объектами в игре?
 
Trilliput
ты там милионы обьектов перебираешь чтоли ? :)

Trilliput 05.12.2007 06:47

Re: Как лучше управлять объектами в игре?
 
Не, объектов 30-40.

oxid 05.12.2007 07:09

Re: Как лучше управлять объектами в игре?
 
Цитата:

Сообщение от Trilliput
Не, объектов 30-40.

Это ты в чем-то гонишь. Тормоза на 30-40 объектах... Или у тебя комп убитый или ты мегасложные вычисления проводишь. А по поводу списков у тебя паранойа. Достаточно их пройти два раза - раз: апдейт и два: отрисовка. В некоторых случаях можно апдейт и отрисовку совместить в один цикл. Две-три тысячи объектов несвязанным списком с двойным проходом (апдейт+отрисовка) в дебаг режиме, а он тормознутее чем релизный, обрабатывать должно аж бегом.


Часовой пояс GMT +4, время: 07:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot