Skocz do zawartości


Kolizja sprite'ów

Delphix.Delphi

1 odpowiedź w tym temacie

#1 BigComeBack

    Nowy na forum

  • Użytkownicy
  • 1 Postów:

Napisano wto, 01 maj 2012 - 21:34

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...

Cytat

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 :)

Załączone pliki

  • Załączony plik  mapka.jpg (230,81 KB)
    Ilość pobrań: 15


#2 LordLost

    Bywalec

  • Użytkownicy
  • 58 Postów:

Napisano sob, 12 maj 2012 - 10:26

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.
delphi
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.