我有一个实现了ICollidable接口的实体列表。这个接口用于解决实体之间的碰撞。我的实体有:
- 玩家
- 敌人
- 抛射物
- 道具
- 瓷砖
每次游戏更新(大约60次/秒),我都会清空列表并根据游戏状态添加当前实体。我是通过以下方式实现的:
collidableEntities.Clear();
collidableEntities.AddRange(players);
collidableEntities.AddRange(enemies);
collidableEntities.AddRange(projectiles);
collidableEntities.AddRange(items);
collidableEntities.AddRange(camera.VisibleTiles);
在将可见瓷砖添加到列表中之前,一切都很正常。运行游戏循环的前1-2秒会出现明显的抽搐,导致绘图延迟(因此我可以看到渲染中的抖动)。我可以删除/添加添加瓷砖的代码行,并看到抖动的发生和不发生,因此我已经将其缩小到了那一行。
我的问题是,为什么? VisibleTiles列表约有450-500个瓷砖,因此数据并不是那么多。每个瓷砖都包含一个Texture2D(图像)和一个Vector2(位置),以确定要呈现的内容和位置。我将继续寻找答案,但从我的角度来看,我无法理解为什么只有前1-2秒会抽搐,而后来就顺畅了。
感谢任何建议。
更新
我尝试将初始容量增加到大约元素数量,但未观察到任何差异。
更新
如请求所示,这是相机.VisibleTiles的代码
public List<Tile>
{
get { return this.visibleTiles; }
}
camera.VisibleTiles
的代码访问权限吗?它可能不仅仅是提供对象引用吗? - Brian WarshawVisibleTiles
属性的代码? - Brian Warshaw