BigComeBack Posted May 1, 2012 Report Share Posted May 1, 2012 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 Link to comment Share on other sites More sharing options...
LordLost Posted May 12, 2012 Report Share Posted May 12, 2012 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.