Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вывод спрайтов как одного [Delphi, Windows]


Страницы:   1 2

mozg ©   (2004-10-10 11:53:00) 

У меня генерится лабиринт, где каждый сегмент стены – отдельный класс, отдельный спрайт. Получается ооочень медленно…fpsа0
Как можно ускорить работу в таком случае?
Можно ли сначало сформировать один большой спрайт – лабиринт, и только потом его вывести на экран?

Delphi6, DelphiX


mozg   (2004-10-10 22:38:00) [21]

>>>что ты крутиш их, или используеш вывод прозрачными или же производиш какие-то вычисление (сложные или массовые) в методе отрисовки или проверки столкновений

и не кручу я их, даже методы такие не писал, и не вычисляю ничего, столкновения то же все5 в массиве проверяются...только вывожу...

>>>Попробуй не проверять столкновения
не проверяю...


Falcon(TFsoft)   (2004-10-10 22:21:00) [22]

У меня выводится 1200(к отрисовке всреднем по 300) спрайтов прямым методом, тоесть поспрайтово и fps 79.

Возможно скорость падает из-за того что ты крутиш их, или используеш вывод прозрачными или же производиш какие-то вычисление (сложные или массовые) в методе отрисовки или проверки столкновений.

Попробуй не проверять столкновения... ведь всё, я так предполагаю проверяется по  массиву 0и1.

Или же попробуй отрисовывать всё как DXBackGroundSprite, у него есть свойство Chip[i,j].


mozg   (2004-10-10 21:57:00) [23]

>>>Это как?
на каждый сегмент стены идет вывод:


procedure RenderMaze(massive:TitemMaze;var spriteeng:TDxSpriteEngine);
var i,j:integer;
begin
 for i:=1 to MaxX do
 begin
   for j:=1 to MaxY do
   begin
     if massive[i,j]=0 then
      with Twall.Create(spriteeng.Engine) do
       begin
        PixelCheck := false;
         Image := form1.dxImageList1.Items.Find('wall');
         Width := Image.Width;
         Height := Image.Height;
         x:=i*Width;
         y:=j*Height;
       end;
   end;

 end;
end;


to Ландграф Павел:
Плохо тебя понял. Сказывается отсутствие опыта в работе с DelphiX. Не знаю как в нем реализовать то, что ты написал. А решить задачу надо.


Ландграф Павел   (2004-10-10 18:39:00) [24]

mozg>непонимаю, а зафиг одним спрайтом?! ты просто не создавай обьекты на каждую стену, а выводи по циклу все карту, которая отображается в данное время
ну типа
for i:=0 to maxX-1
for j:=0 to maxY-1
 рисовать(map[i,j].bitmap,0,0,maxX*32,maxy*32)
Зараннее загрузи все битмапы в массив и шуруй...=)


Darth   (2004-10-10 17:30:00) [25]

//где каждый сегмент стены – отдельный класс
Это как?


mozg   (2004-10-10 12:29:00) [26]

>>>лабиринт же у тебя не слишком часто изменяется

в прнципе лабиринт совсем не изменяется. Он генериться один раз, как массив из нулей и единиц (0-стена, 1-проход) и по этим данным выводиться на экран.

>>> Однако, тебе нужно хранить массивом или еще как-то где какая стена в лабиринте, чтобы столкновения обрабатывать, не давать ходить сквозь стены.

С этим все в порядке, все работает в массиве.

>>>А что, лабиринт очень большой и состоит из кучи элементов, что все ооочень медленно?

Вообще нет, сам не знаю почему. лабиринт 70 на 50 элементов, где-то половина из них заполнена спрайтами...то есть где-то 1750 спрайтов...эээ, кстати довольно много :-)

>>>Можно сформировать одну большую картинку (DXImageListItem) с изображением лабиринта

Подскажи примерно как.

И еще: можно ли единожды вывести все эти спрайты лабиринта на экран, а потом не обновлять их таймеров в каждом кадре? они все равно статические. Двигаться будет только один колобок :-)


Servelat   (2004-10-10 12:13:00) [27]


> Можно ли сначало сформировать один большой спрайт – лабиринт

Можно сформировать одну большую картинку (DXImageListItem) с изображением лабиринта (лабиринт же у тебя не слишком часто изменяется), а потом выводить её на экран. Скорость вывода будет явно больше. Однако, тебе нужно хранить массивом или еще как-то где какая стена в лабиринте, чтобы столкновения обрабатывать, не давать ходить сквозь стены.

А что, лабиринт очень большой и состоит из кучи элементов, что все ооочень медленно?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо