簡體   English   中英

SFML不顯示精靈

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM