DelphiX i kolizja sprite'ów

0

Witam. Niedawno zacząłem bawić się z DelphiX i mam kilka prostych pytań odnośnie kolizji sprite'ów. Przedstawię problem na przykładzie: chcę zrobić 'grę' a'la pacman - na ekranie jest żółty pacman i kilka duchów (to z jakiegoś tutoriala ;)). Tworzę dwa typy:

TPacman = class(TImageSprite)
public
procedure DoMove(MoveCount: Integer); override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;

TGhost = class(TImageSprite)
private
procedure Hit;
end;

Oczywiście dwie zmienne: żółty pac typu TPacman i wrogie duchy typu TGhost.
Nie wiem czy jest to najlepszy sposób na wykonywanie kolizji (wszystko biorę z przykładów), no ale dalej: Procedura na kolizję:

procedure TPacman.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TGhost then
TGhost(Sprite).Hit;
Done := False;
end;

  1. I tu mam pierwsze pytanie: co daje linijka Done := False; ? Czy musi tam być?

Procedura uderzenia ducha (chcę żeby po uderzeniu została odtworzona animacja)

procedure TGhost.Hit;
begin
Collisioned := False;
Image := Form1.DXImageList.Items.Find('Explode');
Width := 28;
Height := Image.Height;
AnimCount := 5;
AnimLooped := False;
AnimSpeed := 50/1000;
AnimStart := 0;
end;

  1. Kolejne pytanie: po co zmieniać Collisioned := False; ?

A teraz najgorsze: chciałem dodać efekt animacji - eksplozji po zjedzeniu ducha.
Kody animacji są wyżej, niby OK, ale po odtworzeniu animacji sprite nie znika z pamięci (chciałem ptoem policzyć ilość sprite'ów na ektranie metodą DXSpriteEngine.Engine.AllCount). No dobra, dodaję polecenie Dead; w procedurze TGhost.Hit; a gdzieś w procedurze OnTimer takie coś:

DXSpriteEngine.Dead;
edit1.text:=inttostr(DXSpriteEngine.Engine.DrawCount);

Teraz wszystko ładnie, tylko duch znika zanim odtworzy się cała animacja eksplozji. Wygląda na to że polecenie DXSpriteEngine.Dead; ściąga go z ekranu w momencie odtwarzania animacji (bo bez tego polecenia animacja jest odtwarzana, ale nie zmniejsza się ilość duchów w liczniku).
3. Co z tym zrobić?

  1. Czy jest jakaś właściwość określająca ilość sprite'ów danego typu na ekranie? (coś jak DXSpriteEngine.Engine.AllCount)? Chciałbym policzyć ilość sprite'ów typu TGhost.

Z góry dziękujęza każdą odpowiedź...

0

tez wlasnie bawie sie w DelphiX i jestem zadowolony z dynamiki gier i odpalania wav'ów jest super :)
a o kolozju sprite'ów poczytaj sobie tutaj !

http://www.republika.pl/resportgql/kurs/col.html

Pozdrawiam ! [niewinnosc]
Pozdro dla Ziombera - wpozo Gosc !

0

<quote>tez wlasnie bawie sie w DelphiX i jestem zadowolony z dynamiki gier i odpalania wav'ów jest super :)
a o kolozju sprite'ów poczytaj sobie tutaj !

http://www.republika.pl/resportgql/kurs/col.html

<quote> Czytałem i nie ma tam odpowiedzi na interesujące mnie pytania. A'propo: niech mi ktoś wyjaśni czym różni się komponent NOXXDXSPRITE od wchodzącego w skład DelphiX DXSPRITEENGINE (bo to chyba jest jego odpowiednik?)? I dlaczego tyle osób używa tego pierwszego?
0

Noxxdxsprite - komponent autorstwa Ziombera zapytaj sie go :)
mozesz go uzywac ale tez nie ma potrzeby ale polecam go !
fajnie mozna nim opisywac kolozie itp.

Pozdrawiam !

1 użytkowników online, w tym zalogowanych: 0, gości: 1