Я пытаюсь закодировать суперсериал js из великолепного канала YouTube «Метамфетамин» на c ++ и SDL2.
Теперь я застрял в Эпизоде 04 - https://www.youtube.com/watch?v=1rBOUyRGQuU
Я пытаюсь создать класс Entity
с вектором класса Trait
. Я хочу создать много разных классов, которые наследуются от Trait
и хранить их в векторе. Я хочу вызвать функцию обновления подклассов, а не исходную функцию обновления черты.
// -- Entity.h -----------------------------------
class Entity {
private:
Vec2 vel;
std::vector<Trait*> traits;
public:
Vec2 pos;
// Constructor & Destructor
Entity(void);
~Entity(void);
void addTrait(Trait* nTrait);
void update();
};
// -- Entity.cpp -----------------------------------
void Entity::addTrait(Trait* newTrait) {
this->traits.push_back( newTrait );
}
void Entity::update() {
for ( Trait* trait : this->traits ) {
trait->update( );
}
}
// -- Trait.h -----------------------------------
class Trait {
private:
std::string name;
public:
// Constructor & Destructor
Trait(std::string aname );
~Trait(void);
void update( void );
};
// -- Trait.cpp -----------------------------------
void Trait::update( ) {
printf("Trait update\n");
}
И подкласс Velocity.h от Черты
// -- Velocity.h -----------------------------------
class Velocity : public Trait {
private:
public:
// Constructor & Destructor
Velocity(std::string aname);
~Velocity(void);
void update(Entity *entity);
};
// -- Velocity.cpp -----------------------------------
void Velocity::update(Entity *entity ) {
printf("Velocity update\n");
entity->setPos(0, 0);
}
Я перепробовал много разных версий и получил разные ошибки. Теперь у меня все работает, когда я добавляю признак скорости к сущности и вызываю метод обновления сущности (который просматривает все черты), только функция обновления вызывается из родительского класса черты (который печатает «Обновление черты» и не «Обновление скорости»).
main.cpp
Entity *mario = new Entity();
mario->setPos( 64, 180 );
mario->setVel( 2, -2 );
Velocity* velTrait = new Velocity("velocity");
mario->addTrait(velTrait);
mario->update();
И второй вопрос заключается в том, что я хочу дать функции обновления скорости указатель на сущность, чтобы я мог изменить положение сущностей и т. Д. *