我正在尝试使用c ++和SDL2从YouTube很棒的频道“ meth meth method”中编写js super-mario系列。
现在我被困在第4集-https://www.youtube.com/watch?v=1rBOUyRGQuU
我正在尝试创建一个Entity
类的向量的类。我想创建许多继承自Trait
的类,并将它们存储在向量中。我想调用子类更新函数,而不是原始的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的Velocity.h子类
// -- 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");
}
我尝试了许多不同的版本,并遇到了不同的错误。现在,它开始工作,当我向实体添加速度特征并调用该实体的更新方法(遍历所有特征)时,只有从父Trait类(显示“ Trait Update”和而不是“速度更新”。
main.cpp
// -- 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);
}
第二个问题是,我想给速度更新函数一个指向实体的指针,以便我可以更改实体的位置等...
答案 0 :(得分:3)
我想创建许多从
Trait
继承的不同类,并将它们存储在向量中。我想调用子类更新函数,而不是原始的Trait
更新函数。
要获取所需的内容,请使用virtual
方法:
virtual void update( void );
有关更多详细信息,建议您研究多态性和虚函数。