System Prefabrykatów
Ostatnio zmodyfikowano 2024-05-05 23:11
pekfos |
» 2024-05-05 23:06:39 getPrefab może być szablonem żeby zrobić dynamic_cast<> na właściwy typ i rzucać wyjątkiem gdy typ się nie zgadza (pewnie i tak rzuca jak nie może znaleźć prefabrykatu o danej nazwie). gameObjects.push_back( new Nature( getPrefab < Nature >( "tree1" ), 100, 50 ) );
nic z tego nie rozumiem. Eh. Chcesz skopiować obiekt z prefabrykatu i wprowadzić modyfikację, tak? Więc zakładając że masz poprawny konstruktor kopiujący dla Nature: Nature * prefab = .....; Nature * obj = new Nature( * prefab ); obj->setPosition( 100, 50 ); gameObjects.push_back( obj ); Możesz zrobić konstruktor który robi to w jednym kroku. Nature( Nature * object, float x, float y ) : Nature( * object ) { sprite.setPosition( x, y ); } gameObjects.push_back( new Nature( prefab, 100, 50 ) );
Rzutowanie możesz umieścić w konstruktorze zamiast w getPrefab, zależy gdzie wolisz zaoszczędzić na pisaniu. Nature( GameObject * object, float x, float y ) : Nature( dynamic_cast < Nature & >( * object ) ) { sprite.setPosition( x, y ); }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-05-05 23:11:26 Ah ok. Mało co z tego rozumiem, musiałbym poeksperymentować jak to działa. Tworzenie obiektów jest mega proste. Problemy zaczną Ci się, gdy będziesz musiał te obiekty usuwać lub wywoływać jakieś akcje na nich :) easy :-) void deleteDeadBeasts() { std::vector < GameObject * > newGameObjectsList; std::vector < Beast * > newBeastsList; newGameObjectsList.clear(); newBeastsList.clear(); for( auto & go: gameObjects ) { if( go->type != gameObjectType::Beast ) { newGameObjectsList.push_back( go ); } } for( auto & b: beasts ) { if( b->dead != true ) { newGameObjectsList.push_back( b ); newBeastsList.push_back( b ); } } gameObjects = newGameObjectsList; beasts = newBeastsList; }
|
|
1 « 2 » |