Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

System Prefabrykatów

Ostatnio zmodyfikowano 2024-05-05 23:11
Autor Wiadomość
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).
C/C++
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:
C/C++
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.
C/C++
Nature( Nature * object, float x, float y )
    :
Nature( * object ) // delegacja do kons. kopiującego
{
   
sprite.setPosition( x, y ); // Cokolwiek GameObject robiło z x,y
}
C/C++
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.
C/C++
Nature( GameObject * object, float x, float y )
    :
Nature( dynamic_cast < Nature & >( * object ) )
{
   
sprite.setPosition( x, y ); // Cokolwiek GameObject robiło z x,y
}
P-181019
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 :-)

C/C++
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;
}
P-181021
1 « 2 »
Poprzednia strona Strona 2 z 2