Libgdx Box2d光线投射无法投射多条光线

Libgdx Box2d光线投射无法投射多条光线,libgdx,box2d,raycasting,Libgdx,Box2d,Raycasting,我试图找到一个关于这个问题的答案,但是看起来并没有很多人像我一样使用光线投射。在我的游戏中,我有多个演员,我想像一个小型机器人上的声纳传感器一样投射一束短波,纯粹是为了避免碰撞 我在每个参与者之间运行一个循环,每个参与者都使用私有Vector2变量从世界上调用自己的光线投射器来保存截取点和法线。如果只有一个参与者,它就可以正常工作,但似乎raycaster函数只有一个实例,并且之前对它的任何调用都会被新调用覆盖,即使它是由其他对象使用新的raycaster()调用调用的。因此,只有我列表中的最后

我试图找到一个关于这个问题的答案,但是看起来并没有很多人像我一样使用光线投射。在我的游戏中,我有多个演员,我想像一个小型机器人上的声纳传感器一样投射一束短波,纯粹是为了避免碰撞

我在每个参与者之间运行一个循环,每个参与者都使用私有Vector2变量从世界上调用自己的光线投射器来保存截取点和法线。如果只有一个参与者,它就可以正常工作,但似乎raycaster函数只有一个实例,并且之前对它的任何调用都会被新调用覆盖,即使它是由其他对象使用新的raycaster()调用调用的。因此,只有我列表中的最后一个参与者实际上从它投射的光线接收信息

以前人们报告的问题只出现在一条光线上,但试图按顺序排序

以下是其中一个参与者内部的光线投射回调:

 RayCastCallback callback = new RayCastCallback() {
        @Override
        public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
        {
            ColP = point;
            System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type);
            SurfNormal = normal;
            dist = 1*fraction;
            return 1;
        }
    }; Parent.world.rayCast(callback,p1,p2);

如果你们对如何实现这一点有什么建议,或者对raycaster的工作原理有什么见解,以便我能够找到解决方法,重写以前的通话,我将不胜感激。

好的,我已经找到了答案。我是stack exchange新手,因此如果约定要编辑我的问题以包含答案,请告诉我。问题是,尽管每个对象都有自己的向量,但我犯了一个noob错误,忘记了只有java原语不是通过引用给出的。解决方案是调用newvector2(point)和newvector2(normal),这样所有向量就不会在raycallback函数中合并为一个

RayCastCallback callback = new RayCastCallback() {
    @Override
    public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
    {
        ColP = new Vector2(point);
        System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type);
        SurfNormal = new Vector2(normal);
        dist = 1*fraction;
        return 1;
    }
}; Parent.world.rayCast(callback,p1,p2);

您是否需要使用不同的返回值?源代码注释说:“您可以通过返回浮点值来控制光线投射的进行方式:返回-1:忽略此固定装置并继续;返回0:终止光线投射;返回分数:将光线剪裁到此点;返回1:不剪裁光线并继续”(编辑格式和标点以适应此处).我不这么认为,因为这只会影响一条光线穿透第一个物体的能力。我为我投射的每一条光线返回0,并在它击中的地方画一个短法向量,但我投射的四条光线中只有一条实际返回了一些东西。仅供参考,你做的是对的,提交了解决方案作为答案