SFML 2.3无法使用RectangleShape子渲染纹理

时间:2016-07-26 06:31:20

标签: c++ sfml

我似乎遇到了一个问题,即在我的一个名为Paddle的类中添加一个纹理,该类有一个超类sf :: RectangleShape。 我使用纹理作为标题中的变量,以避免它在构造函数的范围之后被删除,如下所示:

class Paddle : public sf::RectangleShape {
private:
    // other variables here
    sf::Texture texture;
};

然后在我的Paddle.cpp中使用以下内容:

Paddle::Paddle(Game* game) 
    : RectangleShape(sf::Vector2f(WIDTH, HEIGHT)) {
    // some code here

    if (!texture.loadFromFile("paddle-texture.png")) {
        std::cout << "Couldn't load paddle texture" << std::endl;
    }

    setTexture(&texture);
    setPosition((windowSize.x / 2 - WIDTH / 2), (windowSize.y - 20));
}

然而,无论出于何种原因,这都不起作用。我曾尝试将质地完全移到Paddle类之外,但它仍然没有问题。另外,我想我应该提一下,“不能加载桨状纹理&#34;消息不会出现在控制台中。

我做的另一件事是写我的main.cpp:

sf::RectangleShape paddle(sf::Vector2f(100, 10));
sf::Texture texture;
if (!texture.loadFromFile("paddle-texture.png")) {
    std::cout << "Couldn't load paddle texture" << std::endl;
}
paddle.setTexture(&texture);

完美无缺,并以其纹理呈现!但是,如果我使用它,我会失去我班级的功能和清洁度。所以我想知道它为什么在Main.cpp中渲染纹理而不是作为继承RectangleShape类的类对象?

修改 由于要求,我将解释我的预期和实际结果。现在我试图用纹理渲染一个球拍(paddle-texture.png);但是,我得到一个白色的桨(或任何填充颜色设置),好像它根本没有使用纹理。

要调用创建Paddle我使用以下内容:

Paddle paddle;

然后使用Window我使用:

sf::RenderWindow window(sf::VideoMode(600, 600), "My Project with SFML");

// some code here
// could use the following here:
// Paddle paddle;

window.setFramerateLimit(64);

while (window.isOpen()) {
    sf::Event event;

    // check if close button or esc key is pressed
    while (window.pollEvent(event)) {
        switch (event.type) {
        case sf::Event::Closed:
            window.close();
            break;
        case sf::Event::KeyPressed:
            if (event.key.code == sf::Keyboard::Escape)
                window.close();
            break;
        }
    }

    // render everything onto the screen
    window.clear();
    window.draw(frameDisplay);
    game.drawObjects(); // this is a custom object but could be replaced with:
    // window.draw(paddle);
    window.display();
}

0 个答案:

没有答案