1

私はたくさんのブロックでゲームを作っています。それらは 48x48 ピクセルで、事実上無限の口ですが、制限を設定します。

しかし、どうすればそれを最適化できますか?1 つのマスター リストを用意し、更新ごとに、ゲーム カメラに基づいて更新して描画するものを決定する必要がありますか? 表示できないブロックを更新して描画しても意味がありませんか?

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);
}

ビュー内にあるブロックのブロック リストを維持する必要がありますか、それとも Update メソッドと Draw メソッドの両方で、ブロックが画面の四角形にあるかどうかを確認し、そうであれば更新して描画する必要がありますか? それとも全く関係ないですか?(最後の解決策では、リストを 2 回通過する必要があります)

4

1 に答える 1

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));
}
于 2012-12-07T14:45:25.397 に答える