Я делаю систему коллизий в C ++ с SFML.У меня есть базовый класс 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);
}
А затем класс player , который реализует object и переопределяет два метода:
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 () в классе игрока, это работает, но это не цель.
Я хотел бы изменить onCollision() в детских классах объект без реализации того же кода из actCollision () и checkCollision () в дочерних классах.