Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подгрузка большого количества спрайтов/тайлсов..... =( [D6, Win95/98]


=Venom= ©   (2003-01-13 18:57:00) 

Я пишу RPGшку с помощью DelphiX, использую спрайты из Fallout(конвертированые в BMP). Мне нужно подгрузить 4000 тайлсов каждый 80х36х8bit по 4кб размером. Все вроде должны занимать 16Мб в памяти, но при загрузке
350-го у меня уже вылетает ошибка что мол не достаточно памяти для даной операции..... Оперативки у меня 128МБ.
По идее это все както нужно свопить и подгружать из свопа но я не знаю как это сделать =(. Подскажите плиз.


MRB_SPB   (2003-01-16 10:42:00) [1]

> =Venom=
Попробуй использовать компоновщик графических библиотек для DelphX и грузить сразу всю библиотеку у меня получалось загрузить
без ошибок до 800 спрайтов 256Х256 дальше были проблемы но они решились при использовании Масива из компонентов TDXImageList
то есть придётся разбить все рисунки группами по 200-300 и грузить в разные TDXImageList.
Надеюсь поможет.


Darthman   (2003-01-16 10:36:00) [2]

>а не гонять винт туда сюда каждую сотую долю секунды
А зачем каждую долю секунды? Загружаешь при загрузке сцены, выгружаешь по завершению.


Mirovodin   (2003-01-16 01:39:00) [3]

2 =Venom= ©

Я не знаю, может вы не правильно поняли про "все наборы". Приведу простой пример. В игре Diablo есть персонаж кот-го нужно убить для завершении игры - Dialblo. Этот монстр большой у него много спрайтов, большой объем памяти. Он встречается только на последнем NN уровне. Зачем грузить его спрайты на 1-м уровне (а так же на уровнях NN-1) ???

Точно так же нужно поступать и в вашем случае. Еще наводящий вопрос - почему в играх делают локации и графика в них бывает сильно отличающейся. Это же и про наборы монстров.


cyborg   (2003-01-15 23:57:00) [4]

>>От такого метода я отказался давно.
Почему отказался?

Разбей на наборы (локации) и грузи, возможно очень большую картинку директХ не может обработать, или очнь много маленьких.


=Venom=   (2003-01-15 23:12:00) [5]

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

От такого метода я отказался давно.
О групировке думал, пока что еще не реализовал.

Спрайты у меня храняться в DXImagelist опцию SystemMemory я включал но не ппомогало. Попробую создать масив DIB.

2Baradoo
Спрайты у меня все разные :D.



Мне нужно их за раз загрузить что б их потом использовать,а не гонять винт туда сюда каждую сотую долю секунды, да и FPS тогда упадут..... =((

Короче вот кусок кода програмы:
================================================================

BrushColl:=4500;

for i:=1 to BrushColl do
begin
TileMaps.Items.Add(); //TileMaps это TDXImageList
TileMaps.Items[i].SystemMemory:=true;
TileMaps.Items[i].Picture.LoadFromFile("tiles\"+IntToStr(i)+".bmp");

TileMaps.Items[i].Transparent:=true;
end;


================================================================


[Baradoo]   (2003-01-15 20:34:00) [6]

Я же не думаю, что у тебя все спрайты разные! Вот например у тебя есть класс TSprite, у него есть property Image... А у карты есть массив таких СПРАЙТОВ. Я думаю так все устроенно. По этому поводу я тебе хочу сказать, что зачем загружать одинаковые спрайты? Берешь и загружаешь по одному спрайту каждого вида (например, монстра одного типа, скажем черепахи). А потом другим спрайтам подобного типа (спрайтам черепахи) присваиваешь этот спрайт! (
for i:= 2 to MaxSprites do
if sprites[i].filename="cherepaha.bmp" then
sprites[i]:= sprites[1])


Mirovodin   (2003-01-14 17:12:00) [7]

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

Оптимизация. Спрайты земли (тайтлы ) скорее всего имеют одинаковый размер 80х36 и ОДИНАКОВУЮ ПАЛИТРУ (т.к. 8bit). Во всяком случае можно сгруппировать по одинаковой палитре. След-но, можно хранить только 1 заголовой и 1 палитру на N спрайтов. Кажется не так много ~ 350 байт (заголовок+палитра), но помноженные на N спрайтов - уже МБ.

SystemMemory в true у DIB.


Урб   (2003-01-14 13:18:00) [8]

А у тебя на одной области их 4000 однавременно?


=Venom=   (2003-01-14 13:13:00) [9]

Только видимые и отрисовуються, это для того что б FPS поднять.
НО МНЕ НУЖНО НЕ ЭТО!!! МНЕ НУЖНО ЗАГРУЗИТЬ 4000 СПРАЙТОВ В ПАМЯТЬ
КОМПА. =((


Shadow   (2003-01-13 21:42:00) [10]

Отрисовывай только видимые

???


Наверх

Титульная страница Поиск, карта сайта Написать письмо