pekfos |
» 2022-02-06 18:03:42 No tak... na początku myślałem że podałeś taki kod "pokazowy" a jednak nie. Kompilator mi pluje błędami o "override" bo nie wie co to jest. override jest w języku od 11 lat. Możesz je usunąć, te oznaczenia nie mają wpływu na działanie kodu. Dalej nie rozumiem po co chcesz trzymać te moduły przez wskaźniki na Obiekty. W klasie "samochód" możesz mieć silnik jako "silnik", a w drzewie czwórkowym zarejestrować go jako "obiekt". Nie musisz wszędzie używać tego samego typu wskaźnika. |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2022-02-06 18:10:12 Wersja 8.1.0 Błędy mam też w virtual Module1 * getModule1() { return nullptr; } error: 'Module1' does not name a type|
"Dalej nie rozumiem po co chcesz trzymać te moduły przez wskaźniki na Obiekty" Wszystkie obiekty tworze dynamicznie i przechowuje ich adresy w osobnym kontenerze którym zarządza sobie po swojemu Lista. Drzewko czwórkowe zagląda do każdego kontenera i pobiera wskaźnik, potem swoim kontenerem segreguje obiekty na odpowiednich ćwiartkach. kolizje tez są sprawdzane po przez pobieranie wskaźników, ogólnie wszystko na wskaźnikach jest i nie mogę ich mieszać ze wskaźnikami innych klass. Obiekty które są już stworzone pobierają sobie wskaźniki innych obiektów i robią wewnątrz swoich wirtualnych metod odpowiednie obliczenia. Czyli mam klasę abstrakcyjną w której chce mieć jak najmniej atrybutów i wskaźników no chyba że dany atrybut lub wskaźnik jest wykorzystywany przez wszystkie klasy pochodne to je zostawiam. Oczywiście mogę stworzyć moduły(puste obiekty które czekają na wskaźnik ) w klasie abstrakcyjnej m1,m2,m3....m100... tylko że wtedy każda klasa pochodna też ma dostęp do tego po co ? Czyli np taka mina która jest klasą pochodną i ma tylko wybuchać ma do tego dostęp do tego i zadeklarowane miejsce i nie będzie tego nigdy używać. Dlatego w klasie pochodnej tworzę wskaźnik na Obiekty. Jeśli to uda mi się normalnie przechwycić to dalsze obliczenia nie stanowią problemu.
|
|
pekfos |
» 2022-02-06 18:44:40 Wersja 8.1.0 Powinien więc znać override. error: 'Module1' does not name a type| Tu musisz włożyć minimum wysiłku by dostosować kod z internetu do własnego. Mamy do dyspozycji tylko luźny opis tego co chcesz osiągnąć, więc kod po skopiowaniu nie będzie się od razu wkomponowywać w to co masz już napisane. Problem pojawił sie gdy stworzyłem obiekt modułowy który składa się z kilku obiektów . Dlatego teraz kombinuję z tym aby obiekt miał w pełni kontrolę nad modułami. Podaj przykład, z prawdziwymi nazwami. Dlatego w klasie pochodnej tworzę wskaźnik na Obiekty. Jeśli to uda mi się normalnie przechwycić to dalsze obliczenia nie stanowią problemu. Zgoda że chcesz to robić w klasie pochodnej, ale to dalej nie odpowiada na pytanie czemu wskaźnik jest na Obiekty. Mowa konkretnie o wskaźniku w klasie pochodnej, nie o tym na liście wszystkich obiektów i drzewie czwórkowym. Wracając do samochodu i silnika, oba obiekty są "obiektami" i są na liście obiektów i drzewie kolizji, ale "samochód" nie ma pod maską dowolnego "obiektu", ale konkretnie "silnik". |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2022-02-06 18:57:28 pekafos ja nie wykorzystuje tego kodu od razu do mojego. Pierw kod sprawdzam sobie w nowym pustym projekcie na sucho jak działa i co robi dokładnie. Przyznam że pierwszy raz widzę taki zapis virtual Module1 * getModule1() { return nullptr; }
No ale silnik kontroluje samochód i może na niego wpływać.
|
|
pekfos |
» 2022-02-06 19:39:28 No ale silnik kontroluje samochód i może na niego wpływać. Rozdzielasz tu byty tylko na potrzeby obliczania kolizji, czy nie? Jakieś trzeba przyjąć założenia, dlatego miałeś podać realny przykład. Cała logika samochodu może być zaimplementowana w klasie samochodu i tylko używać stanu z obiektu silnika. |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2022-02-06 20:21:23 Ok, podam przykład ale na bazie moich obiektów.
Tworzę obiekt pancernik (klasa pochodna) i w nim są zawarte Puste wskaźniki na obiekty. Więc pancernik prosi listę o dodanie nowych dwóch obiektów wieżyczki(klasa pochodna) które ich wskaźniki zostaną przypisane do tych dwóch wskaźników pancernik. pancernik ustawi sobie odpowiednie współrzędne/kąty/i cele tych wieżyczek pod siebie w odpowiedniej metodzie. Lista w kontenerach ma zapisane 3 obiekty, jeśli teraz dodam kolejny obiekt np statek(klasa pochodna) to w liście będą 4 obiekty dzięki temu nie mam problemu nad kontrolą kolizji i relacji między obiektami. Jeśli statek popchnie jedna z wieżyczek pancernika która jest do niego przypisana to od razu popchnie w tym samym kierunku pancernik i druga wieżyczkę. Jeśli pancernik zostanie zniszczony to wieżyczki też mogą zostać zniszczone lub po prostu zostaną i będą dalej kontynuować walkę z statkiem. A lista dalej widzi 3 obiekty i robi swoje.
Możliwe że logika w moim kodzie jest głupia ale jak na razie działa dobrze.
|
|
pekfos |
» 2022-02-06 21:12:36 Więc pancernik prosi listę o dodanie nowych dwóch obiektów wieżyczki(klasa pochodna) które ich wskaźniki zostaną przypisane do tych dwóch wskaźników pancernik. Pancernik ma dostęp do swoich pól. Gdzie jest problem o którym pisałeś na początku? Ja to widzę tak class Turret : public Obiekty { };
class Battleship : public Obiekty { std::shared_ptr < Turret > m_turrets[ 2 ]; public: Battleship( GameState & gameState ) { for( int i = 0; i < 2; ++i ) { m_turrets[ i ] = gameState.createObject < Turret >(); } } }; |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2022-02-06 21:20:54 Napisałem to w taki sposób że dalsze dokładanie kodu spowoduje jeden wielki bałagan w kodzie (nieczytelny/nierozbudowywalny) tak jak byś cos napisał w zeszycie na marginesie aby sprawdzić czy działa. I puki co się tu zatrzymałem. |
|
1 2 « 3 » |