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无法投射多条光线的主要内容,如果未能解决你的问题,请参考以下文章