【问题标题】:Libgdx Box2d Raycast cannot cast multiple raysLibgdx Box2d Raycast 无法投射多条光线
【发布时间】:2017-12-16 21:22:11
【问题描述】:

我已尝试找到有关此问题的答案,但似乎没有多少人像我想要的那样使用光线投射。我的游戏中有多个演员,我想像声纳传感器一样将短射线投射到小型机器人上,纯粹是为了避免碰撞。

我对这些actor中的每一个运行一个循环,它们每个都使用私有Vector2变量从World调用自己的raycaster来保存截取点和法线。如果只有一个演员,它工作正常,但似乎 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);

如果你们对如何实现这一点有任何建议,或者对光线投射器的工作原理有深入了解,以便我可以找到一种方法来重写以前的调用,我将不胜感激。

【问题讨论】:

  • 您是否需要使用不同的返回值?源代码 cmets 说:“您通过返回一个浮点数来控制光线投射的进行方式:返回 -1:忽略此夹具并继续;返回 0:终止光线投射;返回分数:将光线剪辑到这一点;返回 1:不要't clip the ray and continue"(编辑格式和标点符号以适应此处)。
  • 我不这么认为,因为这只会影响一条光线比第一个物体穿透更多的能力。我为我投射的每条光线返回 0,并在它击中的地方绘制一个短的法线向量,但我投射的四条光线中只有一条实际上返回了一些东西。

标签: libgdx box2d raycasting


【解决方案1】:

好的,我想通了。我是堆栈交换的新手,所以如果约定是编辑我的问题以包含答案,请告诉我。问题是,即使每个对象都有自己的向量,我还是犯了一个菜鸟错误,忘记了只有 java 原语不是通过引用给出的。解决方案是调用 new Vector2(point) 和 new Vector2(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);

【讨论】:

  • 仅供参考,您做了正确的事情提交了解决方案作为答案
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多