Libgdx Box2d Raycast无法投射多条光线

时间:2017-12-16 21:22:12

标签: libgdx box2d raycasting

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

我通过每个演员运行一个循环,他们每个人都使用私有的Vector2变量从世界中调用他们自己的raycaster来保存拦截点和法线。如果只有一个actor,它可以正常工作,但似乎raycaster函数只有一个实例,并且任何先前的调用被新调用覆盖,即使它是由另一个使用新的Raycaster()调用的对象调用的。因此,只有列表中的最后一个actor实际上从它投射的光线中接收信息。

人们报告的以前的问题只是在一条光线上,但试图对订单进行排序。

以下是其中一个演员内部的光线投射回调:

 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的工作方式有所了解,那么我可以找到解决以前的电话问题的方法,我非常感谢。

1 个答案:

答案 0 :(得分:1)

好吧我明白了。我是堆叠交换的新手,所以如果约定是编辑我的问题以包含答案,请告诉我。问题是,即使每个对象都有自己的向量,我也会产生一个noob错误,并且忘记了只有java基元没有通过引用给出。解决方案是调用新的Vector2(点)和新的Vector2(正常),以便所有向量都不会合并到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);