这绝对是不可理解的。
首先我有这个功能:
void RenderSystem::onDraw( sf::RenderWindow& window, const sf::IntRect& viewRect ) {
for(auto it = mComponents.begin() ; it != mComponents.end() ; ++it) {
if ( viewRect.intersects( sf::IntRect( it->second->getGlobalBounds() ) ) )
window.draw(*it->second);
}
}
由这个调用:
void Game::onDraw()
{
mWindow.clear(sf::Color(208,244,247));
mWindow.setView(mCamera);
SystemManager::instance()->getSystem<RenderSystem>()->onDraw( mWindow, mCamera.getCameraBounds());
mWindow.setView(mWindow.getDefaultView());
mWindow.display();
}
我遇到了一个简单的问题:在 RenderSystem::onDraw 中,viewRect.left、.top、.width 和 .height 的值不是好的值,而且看起来是随机的。我试过了:
void Game::onDraw()
{
mWindow.clear(sf::Color(208,244,247));
mWindow.setView(mCamera);
const sf::IntRect cCoordCamera = mCamera.getCameraBounds();
SystemManager::instance()->getSystem<RenderSystem>()->onDraw( mWindow, cCoordCamera );
mWindow.setView(mWindow.getDefaultView());
mWindow.display();
}
并且......它完美地工作。我不明白为什么...
有任何想法吗 ?
PS : GCC4.7 with Code::Blocks12 on Win7 32bits