【发布时间】:2013-11-02 18:44:33
【问题描述】:
我正在 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;
我显然不明白光线投射和回调是如何工作的。如果有人可以解释为什么这种方法有效,那就太好了。我计划做更多的光线投射来阻止敌人撞到东西等等。
【问题讨论】:
标签: xna farseer raycasting