![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2d аркада [Delphi, Windows]
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;