2012-12-07 15 views
1

我用ALOT塊創建遊戲。他們是48x48像素,幾乎無盡的全部,但我會設置一些限制。優化無盡的塊列表?

但我怎麼能優化它,我應該有一個主列表,併爲每個更新決定哪一個更新和繪製基於遊戲攝像頭?更新和繪製不可見的塊沒有意義?

public override Update(GameTime gameTime) 
{ 
    blocks = new List<Block>(); 

    foreach(Block b in masterblocklist) 
    if(screenRect.Contains(b.Rect)) 
     blocks.Add(b); 

    foreach(Block b in blocks) 
    b.Update(gameTime); 
} 

所以我應該維持在視圖或塊的塊列表,我應該在這兩個更新和繪製方法檢查,如果塊是在屏幕矩形,ifso更新和借鑑呢?或者根本不重要? (最後的解決方案需要對直通名單兩次)

+0

剔除像你描述的是一個方面,以提高性能。除此之外,還可以使用一種技術,即髒迴歸處理,其中只渲染已修改塊的塊,但這取決於渲染在引擎中的實際工作方式。 – Matthew

+1

你是什麼意思優化?你在3D或2D場景中?我其實並沒有真正明白你想達到什麼目的。將不在相機外的塊稱爲「剔除」是實現這一目的的一種好方法,就是使用Quadtrees用於3D場景的2D和Octtrees。 – Carsten

回答

1

編程方面,我推薦並行查詢

public override Update(GameTime gameTime) 
{ 
    var parallelQuery = from b in masterblocklist.AsParallel() 
          where screenRect.Contains(b.Rect) 
          select b; 

// Process result sequence in parallel 
parallelQuery.ForAll(p => p.Update(gameTime)); 
} 
+1

請注意併發訪問某些共享變量。我不確定這會如此簡單 –

+0

@SteveB我同意 – Boomer