Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 16:43   #11
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

array of Txxx = array of dword, всего лишь массив указателей, из 1 000 000 элементов, например, займёт около 4 мегабайт, т.е. в принципе нет особой разницы зарезервируешь ли ты сразу это место или в процессе работы (если число объектов заведомо меньше какого-то числа) потому что этот объём памяти намного меньше, чем память необходимая для хранения собственно объектов. Но хранить всё в массиве (как статическом, так и динамическом) - по-индусски, т.к. при освобождении объекта на его месте в массиве останется nil, и нужно либо сдвигать всё влево, чтоб не оставалось дырок, либо тут же заполнять их новыми объектами. Лучше делать списками, тем более в делфи для этого есть класс TList - так при освобождении объекта предыдущий элемент сцепится со следующим.

Если объект больше не нужен (убит, улетел за экран и не вернётся...) - тут же вызывать метод "самоубийства" TActor.dead, который "вырежет" себя из списка и уничтожит

Код:
Type
 TActor = class
private
    FHandle : array[0..50000] of TSprite;
Сразу нет, экземпляр класса должен занимать как можно меньше места, потому что их будет много. Вместо FHandle[handle] := TSprite.create будет actor[i].create. Хэндлы не нужны.
пыщь
JTG вне форума Ответить с цитированием
Старый 28.07.2009, 17:13   #12
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
т.к. при освобождении объекта на его месте в массиве останется nil, и нужно либо сдвигать всё влево, чтоб не оставалось дырок, либо тут же заполнять их новыми объектами.
Никаких проблем написать функцию сканирующую массив с начала до конца и ищущую свободную ячейку. Лично я так делаю.
Вадим Буренков вне форума Ответить с цитированием
Старый 28.07.2009, 23:06   #13
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Можно подумать в списках оно по волшебству сдвигается ) Те же массивы, только внутреннее устройство скрыто. Согласен насчет того, что незачем изобретать велосипед.

А вообще в играх (в серьезных) надо делать не как удобнее, а как лучше/быстрее/оптимальнее, тогда будет хорошая игра. Я к примеру не раз читал о "вреде" ООП.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 28.07.2009, 23:27   #14
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ну да, я просто пошел более простым путём:
ActorList.Add(self);
ActorList.Delete(ActorList.IndexOf( self));

Глядя на непропорционально растущие размеры/требования игрушек, не скажешь, что кто-то пытается делать лучше/быстрее/оптимальнее, тот же XNA, который сейчас активно пиарят - кругом классы, классы, классы.
пыщь
JTG вне форума Ответить с цитированием
Старый 29.07.2009, 07:32   #15
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

А максимально сколько можно выделить память под объекты,
и еще вопрос как получить размер занимаиймой памяти динамического массива,пытаюс получить а он мне выдает указатель 4-байта
Код:
var
a:array of integer;
...
sizeOf(a);//Дает указатель
VintProg вне форума Ответить с цитированием
Старый 29.07.2009, 15:26   #16
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

VintProg, не заморачивайся с подсчетами, есть в винде Диспетчер задач -> Процессы, в нем четко прописаны все ресурсы.
По поводу динамического массива. Сначала задай размер, потом проверяй.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 30.07.2009, 17:24   #17
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
А я не утруждаю себя созданием алгоритмов сдвига, ...достаточно пометить, что данная запись не используется, оставив ее ресурсы в памяти. Поскольку тип объекта универсален, то следующий объект создается в ближайшей неиспользуемой записи банальным затиранием старой информации новой, или если все записи подряд используются, то в новой, ...разумеется все при работе с динамическим массивом.
Где же тут динамика? Напоминает статический массив, с той лишь разницей что память из кучи выделилась.

Кстати если использовать вместо записей классы, можно реально освобождать память отдельных элементов - объектов класса, не изменяя размерности массива, непосредственно элемент массива будет 4 байта занимать и являться указателем.


Цитата:
А максимально сколько можно выделить память под объекты,
Смотря на сколько хватит оперативной памяти, в том числе виртуальной. Ограничено только имеющимся объемом памяти.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 30.07.2009 в 17:29.
mutabor вне форума Ответить с цитированием
Старый 30.07.2009, 21:18   #18
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Где же тут динамика? Напоминает статический массив, с той лишь разницей что память из кучи выделилась.
Не скажи. В том-то и дело, что массив динамический, он nill в начале работы программы, как только определились нужные ресурсы, они записались в этот массив, ...один элементарный объем ресурса, как ни крути, много памяти не ест, появляются и исчезают объекты, например у меня, довольно часто, ...чтобы не тратить время на очистку, я просто помечаю записи как неиспользуемые, ...следующий объект займет место неиспользуемого, но только тогда, когда это нужно. Динамика в том, что я держу все объекты и их ресурсы в памяти, я динамически ими управляю, но управляю с умом. Если в том нет надобности, зачем ворочить памятью по чем зря?
Если будет переход на следующую карту, например, то массив освободится, и забьется другими ресурсами. А статика - это удел редактора карт, там все ресурсы нужны сразу, чтобы выбирать объекты.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 31.07.2009, 08:49   #19
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Возможно не которые из нас занимались моддингом в gta-vc,gta-sa
так вот там существует скрипт MAIN.SCM,
create_actor $actor #ARMY 50,50,50... не важно
на каком принципе хендл там сделан может кто знает?
VintProg вне форума Ответить с цитированием
Старый 31.07.2009, 08:50   #20
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Возможно не которые из нас занимались моддингом в gta-vc,gta-sa
так вот там существует скрипт MAIN.SCM,
create_actor $actor #ARMY 50,50,50... не важно
на каком принципе хендл там сделан может кто знает?
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MapX создание объектов Google[Bot] Компоненты Delphi 7 27.01.2012 08:33
Динамическое создание объектов Костян Пират Общие вопросы Delphi 12 24.05.2011 18:39
Создание/уничтожение объектов nimf Общие вопросы Delphi 10 14.04.2008 10:54
Динамическое создание объектов LepihinMS Общие вопросы Delphi 18 05.07.2007 23:31
Создание новых объектов Washington Общие вопросы Delphi 1 10.03.2007 21:57