我有一个实现 ICollidable 接口的实体列表。该接口用于解决实体之间的冲突。因此,我的实体是:
- 球员
- 敌人
- 弹丸
- 项目
- 瓷砖
在每次游戏更新(大约 60 t/s)时,我都会清除列表并根据游戏状态添加当前实体。我通过以下方式完成此操作:
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 秒打嗝,但从那里开始就很顺利。
任何建议表示赞赏。
更新
我尝试将初始容量增加到近似数量的元素,但没有观察到差异。
更新
根据要求,这是 camera.VisibleTiles 的代码
public List<Tile>
{
get { return this.visibleTiles; }
}