我正在 XNA 中制作游戏。
我正在做一个从敌人到玩家的光线投射,以确定敌人是否可以看到玩家。这是代码..
private float RayCallBack(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
{
rayhit = fixture.Body.UserData.ToString();
if (fixture.Body.UserData == "player")
{
//AIawake = true;
}
return 0f;
}
_world.RayCast(RayCallBack, _blocklist[0]._floor.Position , ConvertUnits.ToSimUnits(playerpos));
我的问题是,在图片中的情况下,我通过程序生成了由块构成的洞穴,光线似乎穿过了块,因此敌人可以透过墙壁看到。
--
更新
好的,以下代码有效!但是..我不知道为什么!:/
private float RayCallBack(Fixture fixture, Vector2 point, Vector2 normal, float fraction)
{
rayhit = fixture.Body.UserData.ToString();
if (fixture.Body.UserData == "player")
{
return fraction;
}
else
{
return 0f;
}
}
然后在这个类中的一个单独的更新语句中有唤醒敌人的代码。
if (rayhit == "player") AIawake = true;
我显然不明白光线投射和回调是如何工作的。如果有人可以解释为什么这种方法有效,那就太好了。我计划做更多的光线投射来阻止敌人撞到东西等等。