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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2013, 00:59   #1
CeHTuJI
Пользователь
 
Регистрация: 26.08.2013
Сообщений: 51
По умолчанию Много экземпляров объекта

Нужно хранить как то спрайты, у каждого спрайта несколько параметров
Ширина, высота и т.д.(около 5), в суме это 5к экземпляров,я так понимаю так не стоит делать? Что можно использовать для этого?
CeHTuJI вне форума Ответить с цитированием
Старый 30.08.2013, 01:22   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Вопрос: а Вам всегда нужны эти 5к спайтов? Если нет, то думайте, как отпитимизовать код и выделять память только под нужные обьекты.
Delphi_ProGer вне форума Ответить с цитированием
Старый 30.08.2013, 01:28   #3
CeHTuJI
Пользователь
 
Регистрация: 26.08.2013
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Delphi_ProGer Посмотреть сообщение
Вопрос: а Вам всегда нужны эти 5к спайтов? Если нет, то думайте, как отпитимизовать код и выделять память только под нужные обьекты.
ну 1000 точно нужна
CeHTuJI вне форума Ответить с цитированием
Старый 30.08.2013, 01:36   #4
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

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

Последний раз редактировалось Delphi_ProGer; 30.08.2013 в 01:57.
Delphi_ProGer вне форума Ответить с цитированием
Старый 30.08.2013, 02:20   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Нужно хранить как то спрайты, у каждого спрайта несколько параметров
Ширина, высота и т.д.(около 5), в суме это 5к экземпляров,я так понимаю так не стоит делать? Что можно использовать для этого?
Списки объектов, Объектные пулы(заранее заготовленные объекты для данных) вам в помощь.
Списки: TList, TPointerLisr, TObjectList, можно ещё TStringList, да он умеет присваивать строке объект.

Цитата:
Delphi_ProGer
Не несите чепухи. В современных играх, даже только на видимом пространстве отображаются тысячи объектов одновременно.
Да и не в 90х живем, сейчас мало у кого ПК с 128 а то и 256 ОЗУ на борту.

CeHTuJI
А вы не создавайте и не держите все спрайты одновременно, создавайте только текущую видимую часть+со всех сторон 1 слой чтобы не тормозила отрисовка, а остальная пускай место не забивает.
Человек_Борща вне форума Ответить с цитированием
Старый 30.08.2013, 02:32   #6
CeHTuJI
Пользователь
 
Регистрация: 26.08.2013
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Списки объектов, Объектные пулы(заранее заготовленные объекты для данных) вам в помощь.
Списки: TList, TPointerLisr, TObjectList, можно ещё TStringList, да он умеет присваивать строке объект.


Не несите чепухи. В современных играх, даже только на видимом пространстве отображаются тысячи объектов одновременно.
Да и не в 90х живем, сейчас мало у кого ПК с 128 а то и 256 ОЗУ на борту.

CeHTuJI
А вы не создавайте и не держите все спрайты одновременно, создавайте только текущую видимую часть+со всех сторон 1 слой чтобы не тормозила отрисовка, а остальная пускай место не забивает.
Отрисовка у меня только в пределах видимости, 20px за сценой уже не рисуется
CeHTuJI вне форума Ответить с цитированием
Старый 30.08.2013, 07:07   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Тысяча объектов - копейки.
Если у Вас там по 5 полей типа интеджер, то всего в памяти будет
5*4(размер интеджер)*1000 байт ~ 20 килобайт.
Если будут более сложные вещи , типа строк - то в зависимости от их длины уже может быть существенно, но я не верю что для тривиальной задачи необходимо хранить 1000 экземпляров разных строк, скорее всего они во многом повторяются, значит поддаются оптимизации засчёт указателей (в дельфи для строк это автоматизировано, могу дать теорию).

Потом, 1000 объектов на экране для простой игры (а сложную Вы не напишите, при таких-то вопросах) - это скорее всего тайловая карта, а она, как известно, не требует тысяч графических объектов, а лишь небольшого набора, которым замощён экран по некоей карте, и такая организация легко оптимизируется "банком" - почитайте раздел "создание и обсуждение игр" прикреплённые темы.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[WinForms] много экземпляров дочерней формы Glen Windows Forms 1 23.07.2012 20:33
CLR. Ошибка C3918. Как вызвать из объекта обработчик, переданный родителю объекта от деда? Stilet Общие вопросы .NET 0 15.01.2011 17:49
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37