Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Подгрузка большого количества спрайтов/тайлсов..... =(   Найти похожие ветки 

 
=Venom= ©   (2003-01-13 18:57) [0]

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


 
Shadow ©   (2003-01-13 21:42) [1]

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

???


 
=Venom= ©   (2003-01-14 13:13) [2]

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


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

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


 
Mirovodin ©   (2003-01-14 17:12) [4]

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

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

SystemMemory в true у DIB.


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

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


 
=Venom= ©   (2003-01-15 23:12) [6]

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

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

Спрайты у меня храняться в 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;


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


 
cyborg ©   (2003-01-15 23:57) [7]

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

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


 
Mirovodin ©   (2003-01-16 01:39) [8]

2 =Venom= ©

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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-84220
dim-
2003-06-11 22:17
2003.06.26
Как сохранить в регистр


1-84222
Совсем новичок
2003-06-12 23:41
2003.06.26
Как запустить другую программу из приложения на Дельфи?


14-84584
Yanis
2003-06-08 12:51
2003.06.26
Скучно


14-84741
lord
2003-06-05 20:31
2003.06.26
WinPCap


3-84045
Andrey V.
2003-05-29 09:50
2003.06.26
Замена TQuery (без БДЕ)