每次访问都无法重构的抽象列表?

时间:2019-06-03 16:33:55

标签: c#

我正在制作带有碰撞检测功能的游戏。这种碰撞检测每秒可运行250次(有一些优化,但这无关紧要)。

有船,每艘船都有一个精确定义的复杂碰撞体,以确保与视觉模型的碰撞几乎为1:1。

因为每艘船都应提供自己的碰撞点集,所以我做了一个抽象属性,看起来像这样:

public override List<CollisionShape> CollisionBody => new List<CollisionShape>
{
    // top sharp edges
    new CollisionShape(new Vector2(0.3f, 0.035f), 0.8f),
    new CollisionShape(new Vector2(0.7f, 0.035f), 0.8f),
    // wings top-down
    new CollisionShape(new Vector2(0.24f, 0.15f), 3),
    new CollisionShape(new Vector2(0.76f, 0.15f), 3),
    new CollisionShape(new Vector2(0.18f, 0.3f), 5),
    new CollisionShape(new Vector2(0.82f, 0.3f), 5),
    new CollisionShape(new Vector2(0.105f, 0.4f), 4),
    new CollisionShape(new Vector2(0.895f, 0.4f), 4),
    new CollisionShape(new Vector2(0.17f, 0.6f), 9),
    new CollisionShape(new Vector2(0.83f, 0.6f), 9),
    new CollisionShape(new Vector2(0.21f, 0.81f), 6),
    new CollisionShape(new Vector2(0.79f, 0.81f), 6),
    // bottom sharp edges
    new CollisionShape(new Vector2(0.21f, 0.97f), 0.5f),
    new CollisionShape(new Vector2(0.79f, 0.97f), 0.5f),
    // main body
    new CollisionShape(new Vector2(0.5f, 0.4f), 8),
    new CollisionShape(new Vector2(0.5f, 0.67f), 9),
    new CollisionShape(new Vector2(0.35f, 0.425f), 4),
    new CollisionShape(new Vector2(0.65f, 0.425f), 4),
    new CollisionShape(new Vector2(0.38f, 0.77f), 3),
    new CollisionShape(new Vector2(0.62f, 0.77f), 3)
};

这是较简单的方法之一。

我在调试时注意到,该列表每秒每子弹可重构250次。如果有几个子弹特写,则可能意味着每秒重建此列表超过一千次。出人意料的是,性能不会受到明显影响吗?也许它检测到它不需要重建和优化自己?我

我考虑过要在构造函数中使用碰撞体,但是因为我使用了一些反射激活来列出所有飞船,所以它将无法正常工作。我还想确保必需来提供碰撞体集,而做到这一点的唯一方法是通过抽象属性。我觉得我要么错过了一个明显的解决方案,要么正在思考错误的方法。我觉得必须有一种方法来定义一个属性,而不是每次都不要重构它,因为否则,Internet上某个地方的人会已经问过这个问题,而我什么也没找到。感觉我在做一些愚蠢的错误。

那么,有没有一种方法可以保留此抽象属性,而不必在每次访问List时都对其进行重构?

0 个答案:

没有答案