[英]SFML not displaying sprite
我最近開始使用sfml,但無法解決此問題。 我有兩個可以正常工作並顯示精靈的類,但屏幕上沒有任何顯示。 我已經嘗試了一些方法,但到目前為止都沒有成功,這就是為什么我決定在這里詢問的原因:/
感謝您的幫助,技巧也將不勝感激;)
Main.cpp的:
#include <SFML\Graphics.hpp>
#include "Player.hpp"
sf::RenderWindow frame;
sf::Texture player_texture;
Player player(player_texture, 100, 100);
bool quit;
bool handle_events() {
sf::Event event;
if (frame.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
return true;
}
}
return false;
}
void update() {
}
void render() {
frame.clear(sf::Color(127, 142, 123));
player.draw_player(frame);
frame.display();
}
void run() {
while (quit != true) {
quit = handle_events();
update();
render();
}
}
int main() {
player_texture.loadFromFile("player.png");
frame.create(sf::VideoMode(800, 600), "frame");
run();
return 0;
}
Player.cpp:
#include "Player.hpp"
Player::Player(sf::Texture & player_texture, int pos_x, int pos_y) {
player_sprite.setTexture(player_texture);
player_sprite.setPosition(pos_x, pos_y);
player_sprite.scale(4, 4);
}
void Player::draw_player(sf::RenderWindow & frame) {
frame.draw(player_sprite);
}
Player.hpp:
#ifndef Player_hpp
#define Player_hpp
#include <SFML\Graphics.hpp>
#include <iostream>
class Player
{
private:
sf::Sprite player_sprite;
public:
Player::Player(sf::Texture & player_texture, int pos_x, int pos_y);
void Player::draw_player(sf::RenderWindow & frame);
};
#endif
您的播放器精靈使用空紋理初始化。 然后,將另一張圖片加載到紋理中,而播放器精靈不知道這一點。 現在,精靈在紋理上進行的所有計算(例如大小)均無效。
確保在將紋理傳遞給Sprite 之前加載紋理。 並且以后不要更改它。
您確定紋理加載正確嗎? 檢查sf::Texture::loadFromFile
的返回值以進行測試。
而且,為什么您的class Player
不從sf::Sprite
擴展? 我認為在這種情況下,繼承將更適合於這種組合。
另外,在函數handle_events中,當用戶要關閉窗口時,可以直接調用方法RenderWindow::close
。 然后,在函數運行中,調用RenderWindow::isOpen
以檢查您的應用程序是否可以繼續。 它比這個丑陋的未初始化退出變量要少。
nvoigt是完全正確的。
首先(在播放器構造函數中)設置精靈的紋理,然后在主函數中加載它的紋理:
...
player_sprite.setTexture(player_texture);
...
player_texture.loadFromFile("player.png");
...
加載后,您要么必須使用main函數中的.setTexture
再次重新加載紋理。 或者,您必須完成代碼的重組。
順便說一句,這個if (frame.pollEvent(event))
不是一個好主意。 可能在框架中觸發了多個事件,例如鼠標移動和此后的窗口關閉。 使用if
,即使您正在尋找第二個事件,您也只能處理該幀中的第一個事件,即鼠標移動。 因此,您應該使用一會兒時間( while (frame.pollEvent(event))
)來確保已處理所有事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.