1

我正在用很多块创建一个游戏。它们是 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);
}

那么我应该维护视图中的块的块列表,还是应该在 Update 和 Draw 方法中检查块是否在屏幕矩形中,如果更新并绘制它?还是根本不重要?(最后一个解决方案需要通过列表两次)

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 回答