Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.026 c
1-84144
Comp
2003-06-02 13:06
2003.06.26
Как заставить ScroolBar прокручиваться от ролика мыши?


1-84094
ers
2003-06-10 14:08
2003.06.26
Как сделать подобие Object Inspector как в Delphi/C Builder?


3-84025
cherdn
2003-05-31 16:39
2003.06.26
ODBC под XP


7-84769
Anisimov
2003-04-15 15:42
2003.06.26
Подскажите плиз как узнать время простоя Винды?


1-84151
Levan Varshanidze
2003-06-11 11:45
2003.06.26
Откуда Delphi берет список для редактора?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский