我试图找到有关此问题的答案,但看起来很多人都没有像我想的那样使用光线投射。我的游戏中有多个演员,我想在一个小型机器人身上像声纳传感器一样投射短射线,纯粹是为了避免碰撞。
我通过每个演员运行一个循环,他们每个人都使用私有的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的工作方式有所了解,那么我可以找到解决以前的电话问题的方法,我非常感谢。
答案 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);