在两个演员之间画出视线

Drawing line of sight between two actors

我是LibGDX的新手。我正在尝试通过开发演示游戏来学习 LibGDX。在游戏中,当军队和敌人彼此可见时,我想在他们之间画一条视线来证明他们看到了对方。视线应该逐渐增加,比如我们在windows 7传输文件时绿色部分逐渐增加。我正在使用 scene2D 并实现了 scene2D 的屏幕接口。

您可能想查看物理库。在您的应用程序中明确使用它(例如 Box2d 或 libgdx 的 BulletPhysics)。这两者都有光线投射的概念和某种形式的光线投射回调。这允许您为 "line of sight" 选择一个 "starting point" 并查看光线投射 hits/collides 的内容。

如果您不想在您的应用程序中使用物理库,您至少可以查看两者的源代码,并推出您自己的精简功能以实现您的视线目标。

那么您是在为玩家和计算寻找视觉上的东西吗?我不知道你所说的 windows 7 文件传输是什么意思。

这完全取决于你想要的东西有多准确,但你需要某种光线投射,就像 Peter R 所说的那样。你有这方面的库,但根据你的需要,这可以很容易地自己实现。

你拿走了一个单位或军队的 Vector 和敌人的 Vector。然后检查那些 Vectors 之间的障碍物。你应该有一个 float 表示直线每一步的距离,它越高效率越高,但也越不准确,因为它可能会跨过一个小物体。

一些未经测试的 2D 伪代码:

RayCast(Vector v1, Vector v2)
{
    Vector2 p = v1;
    Vector2 direction = (v2 - v1).normalize;
    float distance = 0.5f;
    float totalDistance = 200;

    while (Distance(p & v2) > distance && Distance(p & v1) < totalDistance)
    {
         p += direction * distance;
         if (some obstruction is at p)
         {
             //no line of sight
         }
    }

}

我使用 AndEngine 开发了游戏,我使用了 AndEngine box2D 物理,我不断更新两个玩家之间的位置,如下所示: 我有两个玩家,一个玩家和另一个敌人。我画了线,线的终点位置由玩家和敌人的位置给出。我已经通过获取他们的坐标

//line of sight
final Line e1line = new Line(player.getX(), player.getY(), enemy.getX(), enemy.getY())

最后,我使用更新处理程序在玩家移动时继续移动线,如下所示:

IUpdateHandler updatehand = new IUpdateHandler(){
@Override
public void onUpdate(float pSecondsElapsed) {

// line of sight and notifier update
e1line.setPosition(player.getX(), player.getY(), enemy1.getX(), enemy1.getY());
}
@Override
public void reset() {}
};