我正在製作XNA遊戲,我想知道是否有優化某些循環的方法。例如:XNA優化 - 循環展開?
我有一個地圖類,包含瓦片的集合,因此,在地圖更新()只需要調用每瓦更新()
// Update method in Map Class
public void Update()
{
for (int index = 0; index < tiles.Count; index++)
{
tiles[index].Update();
}
}
這工作得很好,但是,它可以獲得最差一些較大的填充物一樣,在那裏,每個粒子與ParticleManager類管理(包含顆粒的集合)的顆粒類,所以:
// Update method in ParticleManager class
public void Update()
{
for (int index = 0; index < particle.Count; index++)
{
particle[index].Update();
}
}
//Update Method in Particle class
public void Update()
{
for (int index = 0; index < Map.tiles.Count; index++)
{
CheckCollitions(Map.tile[index], this);
}
}
的ParticleManager循環的每個粒子和每個粒子檢查每個瓷磚的碰撞。 所以,如果你有20個粒子和100瓦,它會做很多計算的:
20 loops cycles * 100 loops cycles
這就是爲什麼我想一些優化,如循環展開,但是,我不知道,如果它(我認爲沒有)與不定長循環(會導致編譯器不知道在編譯時的迴路長度)
綜上所述:
- 有可能使用循環展開優化這些循環?
- 你可以給我任何其他類型的優化嗎?
感謝
你會受益於四叉樹嗎?很多這些完整的碰撞檢查可能可以通過某種過濾器來避免。 – Magus
谷歌空間分區和Magus提到的四叉樹 – dferraro