簡體   English   中英

SFML僅繪制一些精靈

[英]SFML only draws some sprites

我遇到一個奇怪的問題,一個精靈正在加載,而另一個精靈沒有加載

這是我的main.cpp

    window.draw(universe.getPlayer()->draw());  //Draw Player

    std::list<AbstractBlock*>::const_iterator i;
    std::list<AbstractBlock*>* values = universe.getLoadedBlocks();

    for (i = values->begin(); i != values->end(); ++i){
        window.draw((*i)->draw()); //Draw Blocks
    }

    window.display();

在這里,您可以看到播放器圖形以及Universe圖形中的所有塊。 但是,只有玩家抽獎,而方塊完全不抽獎。 我已確保該循環實際上在工作。 但是,因為draw()返回void,所以我實際上看不到它是否起作用。

這是DirtBlock.cpp(我從AbstractBlock繼承)

DirtBlock::DirtBlock(int x, int y, float rotation, b2World *world){
    bodyDef.position.Set(x, y);
    bodyDef.linearDamping = .03f;
    bodyDef.type = b2_dynamicBody;

    fixDef.density = .1f;

    b2PolygonShape shape;
    shape.SetAsBox(16, 16);

    fixDef.shape = &shape;

    body = world->CreateBody(&bodyDef);
    body->CreateFixture(&fixDef);

    texture.loadFromFile("Dirt.bmp");

    sprite.setTexture(texture);
    sprite.setOrigin(16, 16);


}

sf::Sprite DirtBlock::draw(){
    sprite.setPosition(body->GetPosition().x, body->GetPosition().y);
    return sprite;
}

並非所有內容都包括在內,僅包含圖形所涉及的內容。

我的播放器類非常相似:

Player::Player(b2World *world){

    texture.loadFromFile("player.bmp");
    bodyDef.position.Set(10, 10);
    bodyDef.type = b2_dynamicBody;
    fixDef.density = .1f;
    b2PolygonShape shape;
    shape.SetAsBox(16, 16);
    fixDef.shape = &shape;

    body = world->CreateBody(&bodyDef);
    body->CreateFixture(&fixDef);
    body->SetLinearDamping(.03f);

    sprite.setTexture(texture);
    sprite.setOrigin(16, 16);

    force = 10.f;

}

sf::Sprite Player::draw(){
    sprite.setPosition(body->GetPosition().x, body->GetPosition().y);
    sprite.setRotation(body->GetAngle() * (180 / b2_pi));
    return sprite;
}

既然它們是如此相似,為什么一張圖紙卻另一張不是? 我感覺可能是因為我的繼承。 我通常是Java程序員,但我不是100%確信我在C ++中正確進行了繼承。 應該是這樣嗎? (我的DirtBlock.h)

class DirtBlock: public AbstractBlock
{
public:
    DirtBlock();
    DirtBlock(int x, int y, float rotation, b2World *world);
    ~DirtBlock();
    virtual sf::Sprite draw();
    virtual void destroy(b2World *world);
private: 
    sf::Sprite sprite;
};

我實際上是自己修復的。 事實證明,這對我來說是一個愚蠢的錯誤,但是我還是會寫和回答,所以如果其他任何人犯了這個錯誤,他們可能會發現並解決他們的問題。

我沒有使函數在AbstractBlock類中drawvirtual 因此,當我為DirtBlock調用draw時,它正在AbstractBlock中尋找沒有虛擬標志的draw方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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