【发布时间】: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