У меня странная проблема, когда один спрайт загружается, а другой нет.
Вот мой 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();
Здесь вы можете увидеть рисунок игрока и рисунок всех блоков вселенной. Однако рисует только игрок, а блоки вообще не рисуются. Я убедился, что цикл действительно работает. Однако, поскольку 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;
};