Skocz do zawartości

Kolizja sprite'ów


BigComeBack

Polecane posty

Witam!

Uprzedzam, że z większością podobnych tematów z innych forów zapoznałem się i nie rozwiązały one mojego problemu. Dokładnie chodzi mi o kolizję między dwoma Sprite'ami(jeden stoi, druga rusza się za pomocą DoMove), w której pierwszy Sprite ma możliwość pójścia w inną stronę, która nie jest zablokowana przez tego drugiego Sprite'a, który jest "powielony"(pochodzi z tablicy) i tworzy labirynt... Oczywiście opieram się na procedurze DoCollision, ale w zupełności nie mogę wymyślić, jak nasz "ludek" ma iść w stronę niezablokowaną...Mniej więcej tak moja procedura wyglądała...

procedure TGracz.DoCollision(Sprite: TSprite; var Done: Boolean);

var a2,b2:smallint;

begin

If (Sprite is TKlocek) then

begin

for a2:=1 to 16 do

for b2:=1 to 10 do

begin

if mapa[a2,b2]=true then

begin

If (Klocek[a2,b2].x+x1=Gracz.X) or (Klocek[a2,b2].X=Gracz.X+x1) or

(Klocek[a2,b2].Y+y1=Gracz.Y) or (Klocek[a2,b2].Y=Gracz.Y+y1) then

Gracz.Collisioned:=true;

end;

end;

end;

end;

 

Jakby mapa jest tablicą boolean, za pomocą której stworzyłem z pliku tekstowego typu 0-1 kształt mojej mapki...

 

Załączam także wygląd dotychczasowy wygląd mojej gry :)

 

Z góry dziękuje za pomoc i sorki za "informatyczne kolokwializmy" i pewnie jakieś durne błędy, ale po prostu dopiero zaczynam :)

 

P.S. Korzystam z delphixu bo jest najprostszy :)

post-3359-0-08643200-1335904221_thumb.jpg

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Ja w tym wypadku nie operowałbym x i y tylko numerami kolumn i wierszy. Przed wykonaniem ruchu np w górę sprawdza się warunek przy wciśnięciu kursora.

if not(mapa[Gracz.kolumna,Gracz.wiersz-1])then {rusz się do góry};

 

W DX nie używałem, ale w omedze OmegaSprite miał już napisaną procedurę do sprawdzania kolizji i sam pisałeś tylko reakcję na kolizje(OnCollision) dla poszczególnych typów.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...