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();
在这里你可以看到玩家绘制和宇宙中的所有方块绘制。然而,只有玩家抽牌,方块根本不抽牌。我已经确保了这个循环是有效的。然而,因为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类virtual
中创建函数draw
。因此,当我为DirtBlock调用draw时,它会在AbstractBlock中寻找没有虚拟标志的draw方法。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 绘制精灵会导致分割错误
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 为什么该代码不绘制精灵C++ SFML
- 仅使用精灵绘制
- 在绘制循环中绘制精灵
- OpenGL精灵绘制质量低
- OpenGL-快速精灵绘制-需要一些指导
- 如何在cocos2d-x3测试版中围绕精灵绘制边界框
- 尝试绘制精灵地图时出现 SFML 错误
- C++SFML精灵没有绘制,但是没有出现错误
- 未在指定位置绘制的精灵
- 在 cocos2d-x v3 中绘制并向场景添加大量精灵(~200)的最佳方法是什么?
- 无法从 Direct2D png 使用 DirectX9 绘制图像精灵
- OpenGL没有绘制我的纹理精灵
- 精灵批次只绘制第一个精灵
- 使用 directX 10 绘制大型精灵时性能低下
- SFML在另一个类中绘制移动精灵
- c++ SFML精灵不能通过类绘制
- SFML只绘制一些精灵