ヒューマノイドから派生したプレーヤークラスがあり、ヒューマノイドはスプライトから派生しています
Sprite -> Humanoid -> Player
ここまでは順調ですね。スプライトには仮想メソッドがあります
virtual sf::Sprite getSprite() { return sprite_; }
ここで、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 フォーラムに投稿する前に、私の継承ツリーが実際に正しいかどうかを確認したいと思います。