我似乎遇到了一个问题,即在我的一个名为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();
}