Autor Wątek: Kolizje - powiadamianie obiektow, manager  (Przeczytany 1130 razy)

zerlo

  • Gość
# Czerwiec 28, 2007, 21:41:17
Witam. Wzorujac sie na tym poscie stworzylem prosty manager kolizji. W momencie zarejestrowania obiektu wskaznik na niego (rzutowany na interfejs kolizji) jest dodawny do listy, a gdy jakis obiekt sie przesunie manager sprawdza czy nie koliduje z innymi (oprocz siebie) zapisanymi w tym kontenerze. Jezeli do zderzenia doszlo wykonywana jest metoda OnCollision odpowiedniego obiektu. To proste rozwiazanie przestalo mi jednak wystarczac i zastanawiam sie jak moge je rozwinac. Obiekt, poprzez metode OnCollision, musi dostawac wskaznik na to z czym koliduje i w zaleznosci od tego z czym zaszlo zderzenie roznie zareagowac. Dodatkowo przydaloby sie, aby mozna bylo ustalac z jakimi obiektami  ma byc sprawdzana kolizja. Ja wymyslilem taki sposob:
- do klasy interfejsu kolizji dodac ENUMa, w ktorym bedzie zapisany typ obiektu
- zrobic specialna strukture, ktora zawiera wskaznik na obiekt oraz liste typow z jakimi koliduje
- w managerze sprawdzac czy dany obiekt ma typ zgodny z jednym z listy obiektu, dla ktorego sprawdzane sa kolizje, jezeli tak to wykonac obliczenia
- w wypadku stwierdzenia kolizji wywolac metode odpowiedniego obietu i, jako argument, przekazac mu wskaznik (typu interfejsu kolizji) na obiekt, z ktorym koliduje
- w OnCollision sprawdzac typ obiektu i rzutowac go na odpowiedni wskaznik, aby uzyskac dostep do specyficznych dla danej klasy pol i metod (tych, ktorych nie ma interfejs)

To rozwiazanie wydaje mi sie bardzo proste, ale dajace wiele mozliwosci. Jednak postanowilem sie upewnic i Was zapytac. Czy ktos ma lepszy pomysl? Moze to co zaproponowalem jest tylko pozornie poprawne?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Czerwiec 29, 2007, 11:24:38
Odpowiedzi nie znam, ale wiem, że abstrahując od kolizji to jest po prostu problem jak zorganizować "serce gry", czyli połączenia między klasami tak, żeby nie musiało wszystko używać wszystkiego, wszystko o wszystkim wiedzieć i rzutować w dół. Najważniejsze tematy w których to już omawialiśmy to:

http://forum.warsztat.gd/index.php/topic,2584.0.html
http://forum.warsztat.gd/index.php/topic,3450.0.html

Poczytaj, może tam coś znajdziesz.