我正在使用SFML在C ++中创建碰撞系统。我有一个使用以下方法的 object 基类:
class Object : public sf::CircleShape {
protected:
bool collision;
void onCollision();
void afterCollision();
public:
bool checkCollision(Object& object);
bool reactCollision(bool _collision);
};
bool Object::checkCollision(Object& object) {
//Calcul distance with object and radius
bool _collision = (distance <= radius)? true : false;
this->reactCollision(_collision)
return _collision;
}
bool Object::reactCollision(bool _collision) {
//If collision state change compare to previous
if(_collision != collision) {
if(_collision) {
this->onCollision();
}
else {
this->afterCollision();
}
collision = _collision;
}
return _collision;
}
void Object::onCollision() {
this->setFillColor(sf::Color::Red);
}
void Object::afterCollision() {
this->setFillColor(sf::Color::White);
}
然后是实现 object 并覆盖两种方法的 player 类:
class Player : public Object {
protected:
void onCollision();
void afterCollision();
};
void Player::onCollision() {
this->setFillColor(sf::Color::Magenta);
}
void Player::afterCollision() {
this->setFillColor(sf::Color::Green);
}
问题:玩家使用父级基本方法而不是他自己的专用方法。如果我在播放器类中实现了 reactCollision()和 checkCollision(),那是可行的,但不是目标。
我想在 object 的子类中修改 onCollision(),而无需实现 reactCollision()和 checkCollision()。