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