由于 Sprite,C++ SFML 中的白盒问题
a white box problem in C++ SFML due to Sprite
你好,我试图为我的游戏绘制一个简单的正方形,但它绘制的是一个白色正方形而不是我的图像。这是我的代码...
paddle.hpp
class Paddle
{
public:
Paddle(){}
Paddle(sf::RectangleShape myPaddle);
void Draw(sf::RenderWindow& window);
void setImage();
private:
sf::Texture m_texBackground;
sf::Sprite m_imgBackground;
sf::RectangleShape m_shape;
};
paddle.cpp
Paddle::Paddle(sf::RectangleShape myPaddle) :m_shape(myPaddle)
{
[b][font=times new roman]setImage();[/font][/b]
}
void Paddle::setImage()
{
if (!m_texBackground.loadFromFile("img/bats/bat_black.png")) {
std::cout << "bat_black.png didnt open" << std::endl;
}
else {
m_imgBackground.setPosition(m_shape.x, m_shape.y);
m_imgBackground.setTexture(m_texBackground);
//Some scale stuffs
}
}
void Paddle::Draw(sf::RenderWindow& window)
{
window.draw(m_shape);
window.draw(m_imgBackground);
}
game.hpp
class Game
{
public:
Game();
void startGame(); //My main while loop here
//some other functions...
private:
sf::RenderWindow m_window;
Paddle m_paddle;
};
game.cpp
Game::Game()
{
sf::RectangleShape myPaddle(sf::Vector2f(100, 20));
myPaddle.setPosition(sf::Vector2f(m_windowWidth/2.0f, m_windowHeight-4.0f * raketim.getSize().y));
myPaddle.setFillColor(sf::Color::Green);
m_paddle =Raket(myPaddle);
//m_paddle.setImage();
}
void Game::startGame()
{
while (m_window.isOpen())
{
//some other while loops event stuffs functions etc here
m_paddle.Draw(m_window);
//some other functions here
}
}
所以我要告诉你我的问题是什么。
当我尝试从 Game 构造函数内部的 Game.cpp 调用“setImage”函数时,一切都很好,它正在工作..
我的意思是绘制 Sprite 是的......但是当我尝试从 Paddle 构造函数内部的 Paddle.cpp 调用“setImage”时,它正在绘制一个白色方块......
实际上对于这个桨没关系它至少在画..
但是我为我的游戏墙添加了很多图像。它在大循环中..
我不能总是从游戏构造函数中调用它。那么我如何从我的基础 class 中调用它呢?我检查了白盒问题,但我已经在 Paddle.hpp 中定义了我的纹理和精灵。我的意思是它不会在小范围内消失。那么问题是什么?我是 SFML 的新手..你能帮帮我吗?
我想我至少解决了这个问题。问题是无论我做什么,我都无法阻止某些实例因为结束它们的相关范围而丢失。花了一些时间才看到,因为我没有根据 class..但是我在我的 Game.cpp 中定义了一个桨。所以问题是一样的。他们称这是一个白方块问题..我让 SFML 的文档在这里你可以从那里检查。希望对你有帮助SFML the white square problem
你好,我试图为我的游戏绘制一个简单的正方形,但它绘制的是一个白色正方形而不是我的图像。这是我的代码...
paddle.hpp
class Paddle
{
public:
Paddle(){}
Paddle(sf::RectangleShape myPaddle);
void Draw(sf::RenderWindow& window);
void setImage();
private:
sf::Texture m_texBackground;
sf::Sprite m_imgBackground;
sf::RectangleShape m_shape;
};
paddle.cpp
Paddle::Paddle(sf::RectangleShape myPaddle) :m_shape(myPaddle)
{
[b][font=times new roman]setImage();[/font][/b]
}
void Paddle::setImage()
{
if (!m_texBackground.loadFromFile("img/bats/bat_black.png")) {
std::cout << "bat_black.png didnt open" << std::endl;
}
else {
m_imgBackground.setPosition(m_shape.x, m_shape.y);
m_imgBackground.setTexture(m_texBackground);
//Some scale stuffs
}
}
void Paddle::Draw(sf::RenderWindow& window)
{
window.draw(m_shape);
window.draw(m_imgBackground);
}
game.hpp
class Game
{
public:
Game();
void startGame(); //My main while loop here
//some other functions...
private:
sf::RenderWindow m_window;
Paddle m_paddle;
};
game.cpp
Game::Game()
{
sf::RectangleShape myPaddle(sf::Vector2f(100, 20));
myPaddle.setPosition(sf::Vector2f(m_windowWidth/2.0f, m_windowHeight-4.0f * raketim.getSize().y));
myPaddle.setFillColor(sf::Color::Green);
m_paddle =Raket(myPaddle);
//m_paddle.setImage();
}
void Game::startGame()
{
while (m_window.isOpen())
{
//some other while loops event stuffs functions etc here
m_paddle.Draw(m_window);
//some other functions here
}
}
所以我要告诉你我的问题是什么。
当我尝试从 Game 构造函数内部的 Game.cpp 调用“setImage”函数时,一切都很好,它正在工作..
我的意思是绘制 Sprite 是的......但是当我尝试从 Paddle 构造函数内部的 Paddle.cpp 调用“setImage”时,它正在绘制一个白色方块......
实际上对于这个桨没关系它至少在画..
但是我为我的游戏墙添加了很多图像。它在大循环中..
我不能总是从游戏构造函数中调用它。那么我如何从我的基础 class 中调用它呢?我检查了白盒问题,但我已经在 Paddle.hpp 中定义了我的纹理和精灵。我的意思是它不会在小范围内消失。那么问题是什么?我是 SFML 的新手..你能帮帮我吗?
我想我至少解决了这个问题。问题是无论我做什么,我都无法阻止某些实例因为结束它们的相关范围而丢失。花了一些时间才看到,因为我没有根据 class..但是我在我的 Game.cpp 中定义了一个桨。所以问题是一样的。他们称这是一个白方块问题..我让 SFML 的文档在这里你可以从那里检查。希望对你有帮助SFML the white square problem