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

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

2d аркада [Delphi, Windows]


Страницы:   1 2

Micke ©   (2004-07-01 15:51:00) 

Я пробую написать свою 2d аркаду на Delphi с использованием DelphiX. У меня возник рад трудностей, которые мне хотелось бы разрешить.
1. Карта в игрухе состоит из блоков (tiles), я пробовал 2 способа их отрисовки:
 1-й
     for xx:=1 to 60 do
     for yy:=1 to 30 do
     if (armap[xx,yy]<>0) then
     TilesList.Items[armap[xx,yy]].Draw(DXDraw.Surface,(xx-1)*32,(yy-1)*16,0);

2-й For j:= 1 to 60 do
 For i:= 1 to 30 do
 Begin
   with TMap1.Create(SpriteEngine.Engine) do
   begin
     Image:=TilesList.Items[armap[j,i]];
     Width := Image.Width;
     Height := Image.Height;
     x:=(j-1)*32;
     y:= (i-1)*16;
     Z := 0;
     end;
 end;


В 1-м способе игра отлично идёт бех торможения, во втором способе наблюдаются доволбно сильные тормоза, особенно при появлении на карте новых объектов. Оно и ясно, ведь во втором способе каждый кусочек(tile) является отдельным объектом. Но мне необходимо использовать второй способ, т.к. мне надо проверять Collision с картой и скролить её при движении игрока. Пули тоже являются отдельными объектами и при выстреле всё ещё больше тормозит. Как решить эту проблему?
2. Пули на большой скрорости пролетают сквозь стены. Что делать?


Огромное Кулясищще   (2004-07-01 20:04:00) [21]

2 Micke:

Котлеты и мухи отдельно. Если так (т.е. настаиваешь на SpriteEngine), что то держи карту и объекты, с которыми можно столкнуться отдельно. Если не так, но выдери ту же коллизию (см. function ImageCollisionTest) и проверяй столкновение поверхностей.


Micke   (2004-07-01 17:24:00) [22]

Может кто-то знает как сделать не тормозящую карту из тайлов со скролингом и Collision'ом?


Micke   (2004-07-01 17:24:00) [23]

Что-то я не пойму. Как ты собирался таким способом вообще создать кучу тайлов. Я моём коде я создавал несколько объектов, а ты создаёшь один и просто меняешь у него Image. Таким образом мы создим самый последние тайл на карте )))
Тут надо делать что-то другое. Что бы не тормозила карта.


Micke   (2004-07-01 16:48:00) [24]

Мне бы всётаки хотелось решить проблему с SpriteEngine. Нипонимаю почему он не хочет рисовать спрайты?


ПсихЪ_клон   (2004-07-01 16:42:00) [25]

Вообще, забей на SpriteEngine. Это по моему провал. Лучше пиши свой класс, можешь парочку нужных функций стянуть из модулей SpriteEngine'а.


Micke   (2004-07-01 16:38:00) [26]

Как ни странно, но это не работает. Просто не рисует карту вообще.
Вот как всё обстоит:


Tmap1 = class(TImageSprite)
   Public
   procedure DoMove(MoveCount: Integer); override;
end;
...
var
 Map:TMap1;
 armap: array [1..60,1..30] of byte;
...

procedure TMainForm.FormCreate(Sender: TObject);
begin
...
Map:= TMap1.Create(SpriteEngine.Engine);

For j:= 1 to 60 do
 For i:= 1 to 30 do
 Begin
   with Map do
   begin
     Image:=TilesList.Items[armap[j,i]];
     Width := Image.Width;
     Height := Image.Height;
     x:=(j-1)*32;
     y:= (i-1)*16;
     Z := 1;
     end;
 end;
end;


ПсихЪ_клон   (2004-07-01 16:02:00) [27]

Зачем ты постоянно криетишь карту?

TMap1.Create(SpriteEngine.Engine)

Неужели нельзя создать объект TMap1, инициализировать его, а затем просто выводить на его основе. Что-то типа:

var
 Map : TMap1;

begin
 Map := TMap1.Create(SpriteEngine.Engine);
end.

...

For j:= 1 to 60 do
For i:= 1 to 30 do
Begin
  with Map do
  begin
    Image:=TilesList.Items[armap[j,i]];
    Width := Image.Width;
    Height := Image.Height;
    x:=(j-1)*32;
    y:= (i-1)*16;
    Z := 0;
    end;
end;


Страницы:   1 2

Наверх

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