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

Вниз

Проблемы с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
1-1129190192
MixAnOL
2005-10-13 11:56
2005.11.06
Автоматическое фокусирование окна


11-1096309326
starter
2004-09-27 22:22
2005.11.06
Вопросы по Thread


1-1129116524
Fl@sh
2005-10-12 15:28
2005.11.06
TFileStream+BlockRead+сохранить массив классов


2-1129059115
Кабан
2005-10-11 23:31
2005.11.06
Промогите разобраться ServerSocket1 и ClientSocket1


1-1129728289
diwww
2005-10-19 17:24
2005.11.06
Как отследыть событие "сворачивание окна" в TrayBar у формы?