Форум: "Игры";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизПодгрузка большого количества спрайтов/тайлсов..... =( Найти похожие ветки
← →
=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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.027 c