Libgdx Box2d Raycast无法投射多条光线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libgdx Box2d Raycast无法投射多条光线相关的知识,希望对你有一定的参考价值。

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

我通过每个演员运行一个循环,他们每个人都使用私有的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("
Colpoint: "+ ColP.x+","+ColP.y+"with "+Type);
            SurfNormal = normal;
            dist = 1*fraction;
            return 1;
        }
    }; Parent.world.rayCast(callback,p1,p2);

如果你们有任何关于如何实现这一目标的建议,或者对raycaster如何工作有所了解,那么我可以找到一种方法来重写以前的调用,我会非常感激。

答案

好吧我明白了。我是堆叠交换的新手,所以如果约定是编辑我的问题以包含答案,请告诉我。问题是,即使每个对象都有自己的向量,我也会产生一个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("
Colpoint: "+ ColP.x+","+ColP.y+"with "+Type);
        SurfNormal = new Vector2(normal);
        dist = 1*fraction;
        return 1;
    }
}; Parent.world.rayCast(callback,p1,p2);

以上是关于Libgdx Box2d Raycast无法投射多条光线的主要内容,如果未能解决你的问题,请参考以下文章

1.Libgdx扩展学习之Box2D_入门介绍

1.Libgdx扩展学习之Box2D_入门介绍

1.Libgdx扩展学习之Box2D_入门介绍

为没有Box2D的libgdx Actors实现冲突检测

3.Libgdx扩展学习之Box2D_夹具

3.Libgdx扩展学习之Box2D_夹具