2017-03-09 8 views
0

私のsf :: Spriteとsf :: Textureを継承してベースクラスからサブクラスに継承しようとしているときに問題があるようです。スプライトとテクスチャをコピーとして送信しようとすると動作しますが、もちろん画像は取得されません。私はこの問題をどのように解決できるか考えていますか?私の基本クラス:SFMLでスプライトとテクスチャを使用して継承を試みる

#ifndef OBJECTHOLDER_H 
#define OBJECTHOLDER_H 
#include <SFML\Graphics.hpp> 
using namespace std; 

class ObjectHolder : public sf::Drawable { 

private: 
    float windowHeight; 
    float windowWidth; 
    sf::Texture texture; 
    sf::Sprite sprite; 
public: 
    ObjectHolder(); 
    virtual ~ObjectHolder(); 
    float getWindowHeight() const; 
    float getWindowWidth() const; 
    const sf::Sprite & getSprite() const; 
    const sf::Texture & getTexture() const; 
}; 

#endif //OBJECTHOLDER_H 

#include "ObjectHolder.h" 

ObjectHolder::ObjectHolder() { 
    float windowHeight; 
    float windowWidth; 
} 

ObjectHolder::~ObjectHolder() { 
} 

float ObjectHolder::getWindowHeight() const { 
    return this->windowHeight; 
} 

float ObjectHolder::getWindowWidth() const { 
    return this->windowWidth; 
} 

const sf::Sprite & ObjectHolder::getSprite() const { 
    return this->sprite; 
} 

const sf::Texture & ObjectHolder::getTexture() const { 
    return this->texture; 
} 

私のサブクラス:

#ifndef PROJECTILE_H 
#define PROJECTILE_H 
#include "ObjectHolder.h" 

class Projectile : public ObjectHolder { 
public: 
    Projectile(); 
    virtual ~Projectile(); 
    void move(const sf::Vector2f& amount); 
    virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const; 
}; 

#endif //PROJECTILE_H 

#include "Projectile.h" 
#include <iostream> 

Projectile::Projectile() { 
    if (!this->getTexture().loadFromFile("../Resources/projectile.png")) { 
     cout << "Error! Projectile sprite could not be loaded!" << endl; 
    } 
    this->getSprite().setTexture(getTexture()); 
    this->getSprite().setPosition(sf::Vector2f(940.0f, 965.0f)); 
} 

Projectile::~Projectile() { 
} 

void Projectile::move(const sf::Vector2f & amount) { 
    this->getSprite().move(amount); 
} 

void Projectile::draw(sf::RenderTarget & target, sf::RenderStates states) const{ 
    target.draw(this->getSprite(), states); 
} 

答えて

2

あなたはむしろprivateよりprotectedとしてメンバーをマークするだけのことができ、あなたの派生クラスはそれらを直接アクセスすることができます:

class Base { 
protected: 
    sf::Texture m_Texture; 
} 

class Derived : public Base { 
    Derived() { 
     m_Texture.loadFromFile("myTexture.png"); 
    } 
} 
+0

はい出来た。ありがとうございました!私はそれがとても簡単だとは信じられません。私は座っているし、定数とコールの値から非常に長い時間の切り替え。私はオプションとして保護されているとは思わなかった。 – Henke

関連する問題