视线的多重光线投射
Multiple Raycasting for line of sight
我正在尝试找到绕过 box2d 的方法,但我不确定我使用光线投射回调进行视线检测的方法。
private RayCastCallback callback = new RayCastCallback() {
@Override
public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 Normal, float fraction) {
collision.set(point);
lineOfSight.addLast(fixture);
if (fixture.getFilterData().categoryBits != BIT_PLAYER) {
System.out.println("ray hit wall");
return fraction;}
else if (fixture.getFilterData().categoryBits == BIT_PLAYER) {
System.out.println("player found");
return fraction;
}
return 0;
}
以上是我的回调方法,调用方式是:
world.rayCast(callback, startp, endp);
上面一行是在update方法中,连续调用。
现在的问题是我有多个 objects 执行此光线投射,所以发生的事情是将固定装置添加到 queue 联系上并且更新方法中有一些代码检查是否queue 中的第一项是播放器。如果是玩家,则发射射弹。
if (lineOfSight.first().getFilterData().categoryBits == BIT_PLAYER) {
lineOfSight = new Queue<Fixture>();
createBullet();
} else {
lineOfSight.clear();
}
所有这些看起来有点乱,也没有完全工作,因为我有多个身体光线投射和使用回调方法。
是否有更有效的方法来执行此操作或以某种方式编辑 reportRayFixtue 方法?我想不出编辑参数的方法:(
谢谢你的时间。
您可能要考虑的一件事(您可能已经知道)是 reportRayFixture
未按任何顺序调用。 因此,即使玩家是视线中的第一个,它可能不是调用该方法的第一个夹具。
要获得正确的排序,您可以使用 fraction
参数来衡量哪个是第一个出现的。分数越小越接近起点,反之亦然。要获得第一个固定装置,您将跟踪调用回调的最小分数。希望这会解决您的问题。
我正在尝试找到绕过 box2d 的方法,但我不确定我使用光线投射回调进行视线检测的方法。
private RayCastCallback callback = new RayCastCallback() {
@Override
public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 Normal, float fraction) {
collision.set(point);
lineOfSight.addLast(fixture);
if (fixture.getFilterData().categoryBits != BIT_PLAYER) {
System.out.println("ray hit wall");
return fraction;}
else if (fixture.getFilterData().categoryBits == BIT_PLAYER) {
System.out.println("player found");
return fraction;
}
return 0;
}
以上是我的回调方法,调用方式是:
world.rayCast(callback, startp, endp);
上面一行是在update方法中,连续调用。
现在的问题是我有多个 objects 执行此光线投射,所以发生的事情是将固定装置添加到 queue 联系上并且更新方法中有一些代码检查是否queue 中的第一项是播放器。如果是玩家,则发射射弹。
if (lineOfSight.first().getFilterData().categoryBits == BIT_PLAYER) {
lineOfSight = new Queue<Fixture>();
createBullet();
} else {
lineOfSight.clear();
}
所有这些看起来有点乱,也没有完全工作,因为我有多个身体光线投射和使用回调方法。
是否有更有效的方法来执行此操作或以某种方式编辑 reportRayFixtue 方法?我想不出编辑参数的方法:( 谢谢你的时间。
您可能要考虑的一件事(您可能已经知道)是 reportRayFixture
未按任何顺序调用。 因此,即使玩家是视线中的第一个,它可能不是调用该方法的第一个夹具。
要获得正确的排序,您可以使用 fraction
参数来衡量哪个是第一个出现的。分数越小越接近起点,反之亦然。要获得第一个固定装置,您将跟踪调用回调的最小分数。希望这会解决您的问题。