![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод спрайтов как одного [Delphi, Windows]
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) с изображением лабиринта (лабиринт же у тебя не слишком часто изменяется), а потом выводить её на экран. Скорость вывода будет явно больше. Однако, тебе нужно хранить массивом или еще как-то где какая стена в лабиринте, чтобы столкновения обрабатывать, не давать ходить сквозь стены.
А что, лабиринт очень большой и состоит из кучи элементов, что все ооочень медленно?