Libgdx Box2d Raycast无法投射多条光线

问题描述 投票:1回答:1

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

我通过每个演员运行一个循环,他们每个人都使用私有的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如何工作有所了解,那么我可以找到一种方法来重写以前的调用,我会非常感激。

libgdx box2d raycasting
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.