Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.03 c
2-1128972479
Zut
2005-10-10 23:27
2005.11.06
получение данных из Access


1-1129207393
Квэнди
2005-10-13 16:43
2005.11.06
Цвета в StringGrid


2-1128311386
Queer
2005-10-03 07:49
2005.11.06
mpeg2


9-1118349447
Кефир87
2005-06-10 00:37
2005.11.06
Collision check -> Sphere vs World -> Реализация


2-1129295255
MAcK
2005-10-14 17:07
2005.11.06
Звук




   Наверх