Java LibGDX碰撞检测改进

Java LibGDX碰撞检测改进,java,android,libgdx,collision,Java,Android,Libgdx,Collision,我希望改进我的碰撞检测算法。我使用的是LibGDX,没有Box2D。我的问题是,当我的屏幕上有太多的实体时,fps会下降到15 这是我目前拥有的,我正在检查地图上的每个对象,并且我正在尝试减少每个实体检查的对象数量 private static void tileCollision(Entity entity) { MapObjects objects = GameScreen.map.getLayers().get(Consts.COLLISION_LAYER_ID).getObje

我希望改进我的碰撞检测算法。我使用的是LibGDX,没有Box2D。我的问题是,当我的屏幕上有太多的实体时,fps会下降到15

这是我目前拥有的,我正在检查地图上的每个对象,并且我正在尝试减少每个实体检查的对象数量

private static void tileCollision(Entity entity) {

    MapObjects objects = GameScreen.map.getLayers().get(Consts.COLLISION_LAYER_ID).getObjects();

    Vector2 currPos = new Vector2(entity.getPosition().x, entity.getPosition().y);

    for (RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)) {

        Rectangle rectangle = rectangleObject.getRectangle();

        if (Intersector.overlaps(rectangle, entity.getPosition())) {

            entity.setX(entity.getPrePosition().x);
            if (Intersector.overlaps(rectangle, entity.getPosition())) {
                entity.setX(currPos.x);
                entity.setY(entity.getPrePosition().y);

                if (Intersector.overlaps(rectangle, entity.getPosition())) {
                    entity.setX(entity.getPrePosition().x);
                }
            }
        }
    }
}

您确定fps下降是由这部分代码引起的吗?我不知道你已经有多少个对象了,但Intersector/Rectangle
overlaps
方法似乎很快-而且没有包含循环,所以你的alghoritm是关于
O(n)
。首先,我会怀疑一些绘图/资源处理问题(批量刷新、不必要的处理等)。最好的方法是让实体本身仅在移动时检查周围的碰撞,不要检查每帧检查每个实体的每个平铺,你在做大量的数学工作。如果你的目标不是研究引擎盖下的东西是如何工作的,我真的建议使用box2d,因为它非常轻,易于使用,而且你不需要太担心某些东西是如何工作的(你不会检查字节是如何发送的,或者在发送http请求时它是如何工作的,是吗?)