gpt4 book ai didi

c++ - SFML 只绘制一些 Sprite

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:50 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,一个 Sprite 正在加载,而另一个没有

这是我的 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();

在这里你可以看到玩家绘图和宇宙绘图中的所有方 block 。然而,只有玩家绘制,而积木根本不绘制。我已经确定循环确实在工作。但是因为 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::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 类 virtual 中创建函数 draw。因此,当我为 DirtBlock 调用 draw 时,它正在寻找 AbstractBlock 中没有虚拟标志的 draw 方法。

关于c++ - SFML 只绘制一些 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com