Klasa pośrednicząca między trzema instancjami różnych typów

Klasa pośrednicząca między trzema instancjami różnych typów
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzień dobry, przejdę do problemu.

Na jednym poziomie "zagnieżdżenia" mam instancję gracza, instancje wrogów i instancje pocisków (np. vector, czy vector opakowany w klasę). Chcę, żeby każdy wróg w swoim AI mógł dodawać instancje pocisków na planszę (tworząc nowy obiekt nadając mu pozycję oraz kierunek lotu) i żeby te pociski mogły trafić w gracza, a po odbiciu we wroga. Chcę detekcję kolizji zaimplementować na tym samym poziomie zagnieżdżenia, co instancje gracza, wrogów i pocisków. Proszę o pomoc.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Nie rozumiem pytania. Musisz mieć gdzieś metodę która operuje na wszystkich obiektach na planszy (btw wszystkie obiekty na dobrą sprawę mogą mieć jedną klasę bazową i być przechowywane "razem") i najpierw każe każdemu obiektowi "wykonać ruch" a następnie testuje możliwe kolizje.

  • Rejestracja: dni
  • Ostatnio: dni
0

Akurat wykonywanie ruchu itp. mam opanowane. Ale chodzi mi o to, że chcę aby klasa wroga mogła wykonać polecenie wystrzału (bezpośrednio ze swojej metody AI). Czyli dodać pocisk (rakietę/strzałę itp.) do kontenera pocisków, który jest obsługiwany przez inną klasę. Strzały muszą widzieć zarówno gracza jak i wrogów (bo gracz może odbić pocisk we wroga). Mam problem z zamodelowaniem tego, przekombinowałem komunikację między klasami, że przy przekazywaniu wskaźnika na obiekt kolizji z instancji wroga do instancji menadżera pocisków wyskakuje mi Segmentation fault :D

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Akurat wykonywanie ruchu itp. mam opanowane.

Z tego co piszesz to właśnie nie masz. Albo masz, ale źle.
Gdybyś zrobił tak:

  • wszystkie obiekty mają pewną klasę bazową która definiuje metodę wykonajAkcje()
  • wszystkie obiekty są w jednej kolekcji
  • masz jedną metodę która wykonuje wykonajAkcje() dla wszystkich elementów kolekcji
  • strzał to nic innego jak dodanie nowego obiektu do kolekcji

BTW ten segfautl oznacza że nie dość że źle to zaprojektowałeś to jeszcze źle zaimplementowałeś. Proponuje rm -rf i zacząć od nowa.

  • Rejestracja: dni
  • Ostatnio: dni
0

To jak sobie wyobrażasz dodanie nowego elementu do kolekcji przez element kolekcji? Bo to co napisałeś właśnie do tego się sprowadza... Wróg (element kolekcji), dodaje do kolekcji rakietę (element kolekcji).

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A gdzie widzisz problem? Musi być jakis serwis który jest zarządcą obiektów na scenie ;]

  • Rejestracja: dni
  • Ostatnio: dni
0

To jak byś to zaprojektował? Chcę komendę wystrzału umieścić w klasie wroga (to chyba naturalne), w metodzie AI. Z poziomu "serwisu" tworzącego obiekty to każdy może, ale jak to zrobić z poziom niżej?

  • Rejestracja: dni
  • Ostatnio: dni
0

Czyli nie potrafisz tego zaprojektować... dobrze, rozumiem.

Zrobiłem sobie singleton zarządzający pociskami. Używany jest zarówno w klasach wrogów, jak i w funkcji sprawdzającej kolizje między pociskami, graczem i wrogami. Wszystko działa prawidłowo.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Jak chcesz żebym widział że coś odpisałeś to użyj @ ;] Nie czytam wszystkich tematów bo nie mam na to czasu. Nie widziałem twojego pytania.
Singleton o którym napisałeś to jedna z możliwych realizacji serwisu o którym mówiłem. Równie dobrze mógłby to być obiekt zarządzany przez jakiś kontener IoC.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.