Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.041 c
2-1129025875
Jolik
2005-10-11 14:17
2005.11.06
Windows запрещает доступ к реестру :(


6-1120576487
yuran
2005-07-05 19:14
2005.11.06
Как передать сообщение через интернет:


2-1129054161
quadronik
2005-10-11 22:09
2005.11.06
Корректировка данных


1-1129379128
kblc
2005-10-15 16:25
2005.11.06
ProgIdToClassID ()


1-1129293783
sax_ol
2005-10-14 16:43
2005.11.06
Как определить имя контрола имея его Handle?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский