1
我在SFML中製作基於拼圖的遊戲,並決定實施一個簡單的包圍盒截錐體剔除,以僅繪製相機視口中的貼圖。結果取得了成功,因爲它將我的幀率提高了兩倍!但是,有一個緩存。當在調試中運行遊戲時,幀率將由實施的平截頭體剔除降低。它在調試中從90 fps下降到30 fps,而在發佈時它從100上升到了大約350 fps。遏抑剔除在調試中降低了幀率,但在發佈中提高了它
剔除只是檢查每個瓷磚矩形,無論它是否與視口的矩形相交。如果確實如此,則繪製。本場比賽呈現多個視圖的分屏和代碼如下所示:
for (unsigned int i = 0; i < views.size(); i++)
{
....
// Calculate viewport rectangle.
IntRect viewRect;
viewRect.width = views[i]->getSize().x;
viewRect.height = views[i]->getSize().y;
viewRect.left = views[i]->getCenter().x - views[i]->getSize().x/2;
viewRect.top = views[i]->getCenter().y - views[i]->getSize().y/2;
// Loop throug level tiles and render them.
for (unsigned int j = 0; j < tileLayers.size(); j++)
{
for (unsigned int k = 0; k < tileLayers[j].size(); k++)
{
if (tileLayers[j][k]->collide(viewRect))
tileLayers[j][k]->drawSprite(window);
}
}
....
bool StaticGameObject::collide(IntRect rectangle)
{
// Private member variable collisionRect.
// Width and height is set in constructor.
collisionRect.left = getPosition().x;
collisionRect.top = getPosition().y;
if (collisionRect.intersects(rectangle))
{
return true;
}
return false;
}
當我刪除了相交呼籲矩形,幀速率回到90 fps。我很困惑,爲什麼會發生這種情況。
也許這與編譯器優化有關?機會是你的代碼沒有在調試模式下優化 - 這是好的 - 但在發佈。嘗試暫時打開調試版本中的優化,看看是否考慮到了fps差異。 – Conduit
另外:歡迎來到SO!如果您對我們社區的運作方式有任何疑問,可以在[幫助中心](http://stackoverflow.com/help) – Conduit
謝謝!我對C++和visual studio有點新鮮。你如何改變編譯器優化? – LethalJam