У меня есть класс Игрока, который происходит от Гуманоида, а Гуманоид происходит от Спрайта, вот так
Sprite -> Humanoid -> Player
Пока все хорошо. Sprite имеет виртуальный метод
virtual sf::Sprite getSprite() { return sprite_; }
где спрайт - это объект изображения, который можно нарисовать на экране.
Гуманоид объявляет virtual sf::Sprite getSprite();
Игрок определяет virtual sf::Sprite getSprite() { return sprite_; }
У Спрайта есть член sprite_
; вот что я хочу сделать:
1) Создайте класс игрока, передавая спрайт, вот так
Player::Player(sf::Image image)
: Humanoid()
{
sprite_.SetImage(image); // Converts sf::Image to sf::Sprite
}
2) Рисуем его на экране из моего класса Game, вот так
sf::Image playerImage;
if(!playerImage.LoadFromFile("Link/Link.png"))
std::cin.get();
Player *player = new Player(playerImage);
/* ... */
App.Draw(player->GetSprite());
Тестируя программу, я обнаружил, что метод player->getSprite()
действительно вызывается, но я боюсь, что, возможно, я спрятал метод Sprite::getSprite()
вместо того, чтобы фактически выводить и использовать его. Поскольку класс Sprite имеет защищенный член sprite_, я не понимаю, какой объект sprite_ я на самом деле возвращаю при вызове функции.
Кроме того, кажется, что файл изображения был потерян где-то вдоль линии, и прежде чем я отправлю сообщение на форуме SFML, я хотел бы получить некоторое подтверждение того, является ли мое дерево наследования правильным или нет.