画出两个演员之间的视线

时间:2015-07-22 16:20:32

标签: android libgdx

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

3 个答案:

答案 0 :(得分:1)

您可能想要查看物理库。要么在你的应用程序中明确使用它(如Box2d或libgdx&#39的BulletPhysics)。这两者都有光线投射的概念和某种形式的光线投射回调。这使您可以选择一个起点"为了你的视线"并查看光线投射命中/碰撞的内容。

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

答案 1 :(得分:1)

所以你正在寻找玩家和计算的视觉效果?我不清楚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
         }
    }

}

答案 2 :(得分:1)

我使用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() {}
};