![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подгрузка большого количества спрайтов/тайлсов..... =( [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]Отрисовывай только видимые
???