我遇到一个奇怪的问题,其中一个精灵正在加载而另一个不是
这是我的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;
};
答案 0 :(得分:0)
我实际上已经修好了。事实证明这是我的一个愚蠢的错误,但我不妨写下并回答如果其他人犯了这个错误,他们可能会发现这个并且它可能会解决他们的问题。
我没有在AbstractBlock类draw
中创建函数virtual
。因此,当我为DirtBlock调用draw时,它正在寻找没有虚拟标志的AbstractBlock中的draw方法。