Форум: "Игры";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизПроблемы с FPS Найти похожие ветки
← →
Xenon (2005-06-13 09:19) [0]Здрасте ув. мастера. Давно я здесь уже не был. Сразу перейду к делу. Пишу на PD, че-то так левое, типа редактора карт так вот как я помню, а помню я вроде юы нормально :), что карта состоит из тайлов и, что она является ничем другим как двумерным массивом и, что каждый тайл - это номер элемента доп. 0-трава,1-вода. Так вот я все так и делаю но почему-то когда карта у меня выводится, то FPS падает до нуля и начинаются жуткие тормоза? Помогите плз.
← →
cyborg © (2005-06-13 11:56) [1]Ты не полную информацию дал.
Расскажи сначала свои выводы по какой причине и где тормозит?
И покажи участки кода, из за которых по твоему мнению тормозит.
Не понятно по твоему сообщению как оно у тебя работает.
← →
XProger © (2005-06-13 12:01) [2]карта 1024х1024 тайла?
видео рива тнт 2?
тайлы с включённым блендингом? ;)))
← →
Sphinx © (2005-06-13 18:59) [3]2 XProger
Теперь я знаю как выглядят местные телепаты ;)
← →
Xenon (2005-06-14 09:11) [4]Во-первых XProger не угадал размер 8Х8 и уже тормоза
Как я загружаю? Не, я лучше напишу принцип: то есть
type telementmap=record
width, height:integer;
X,Y:integer;
Num: integer;
Image:Tagfimage;
………..
end;
var
grass:array[0..1000,0..1000] of TElementMap;
I,j:integer;
mapH,mapW:integer;
………….
потом при загрузке формы пишу
mapW:=4;
mapH:=4;
for i:=0 to mapH do begin
for j:=0 to mapW do begin
grass[I,J].image.create(form1.powerdraw1);
grass[I,j].image.loadfromfile(‘grass.tga’,……..);
end;end;
после этого в PowerTimer1.render пишу
…………
for i:=1 to maph do begin
for j:=1 to mapw do begin
grass[i,j].image.TransparentColor:=clblack;
form1.PowerDraw1.RenderEffect(grass[i,j].image,grass[i,j].x,grass[i,j].y,grass[i,j].num,effectsrcalpha);
end;end;
…………………….
Так вот, что я неправильно делаю????????
← →
cyborg © (2005-06-14 09:25) [5]
> XProger не угадал размер 8Х8 и уже тормоза
Вот это grass:array[0..1000,0..1000] of TElementMap; 8х8?
Тормоза вот от этого:
> grass[I,J].image.create(form1.powerdraw1);
> grass[I,j].image.loadfromfile(‘grass.tga’,……..);
так нельзя делать, если хочешь, чтобы компьютер не падал со стола.
← →
cyborg © (2005-06-14 09:27) [6]
> Так вот, что я неправильно делаю????????
Всё :)
← →
cyborg © (2005-06-14 09:32) [7]Твоя структура:
> grass:array[0..1000,0..1000] of TElementMap;
в памяти занимает более 16 мегабайт по предоставленным данным до точек в записи telementmap, и-то, если там структура Image:Tagfimage; - ссылка на объект, если это ещё одна структура/запись, то всё1 гораздо запущеннее получается, тут и без вывода графики тормозить будет, кеш процессора не резиновый, чтобы такие объёмы данных вмещать.
← →
Sapersky (2005-06-14 15:17) [8]grass[i,j].image.TransparentColor:=clblack;
Возможно, при этом выполняется блокировка и заполнение альфа-канала. Так что вынести в инициализацию.
← →
XProger © (2005-06-14 16:50) [9]Грузим мы так:
for i:=0 to mapH do begin
for j:=0 to mapW do begin
А рисуем так:
for i:=1 to maph do begin
for j:=1 to mapw do begin
Есть предложение делать вот так:
for i := 0 to maph - 1 do
for j := 0 to mapw - 1 do
begin
...
end;
Ещё предложение сделать grass дин массивом:
var
grass : array of array of TElementMap;
Затем перед его заполнением в инициализации:
SetLength(grass, mapW, mapH);
← →
Xenon (2005-06-15 14:39) [10]Спасибо огромное за советы, но тут другая проблемка возникла. Вот карты размером 100*100 еще не дают тормозов, а вот доп. 125*125 уже дают. Вот как бы мне вот енто все оптимизировать??????
← →
cyborg © (2005-06-15 14:47) [11]
> Вот как бы мне вот енто все оптимизировать??????
Переделать, следая данным советам, ни одного не игнорируя.
← →
XProger © (2005-06-15 18:38) [12]Xenon, все 125х125 тайлов видны на экране одновременно? ;)
← →
Домовенок © (2005-06-16 02:19) [13]Xenon (15.06.05 14:39) [10]
Правильно XProger [12] подметил...
Рисуй только видимые тайлы - те которые попадают в видимую область.
← →
Sphinx © (2005-06-16 16:20) [14]Честно не знаю как оно не PD но на DDraw делал карту вплодь до 4096х4096 на отдельной поверхности. А на экран выводиль лишь часть равную:
OffSetX, OffsetY, OffSetX + ScreenWidth, OffSetY + ScreenHeight;
что-то в этом духе...
По субъективным оценкам всеже прощи и быстрее чем каждый кадр перестраивать карту по тайлам, плюс - можно смещать не на ширину тайла (хот наверно у тебя такой проблемы не возникало ;) )
← →
Sphinx © (2005-06-16 16:21) [15][offtop]
Сорри за орфографию...не из дома...не своя клавиатура и т.д.
[/offtop]
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c