4

在 libgdx 游戏中

我想 touchDown 然后拖动某处,然后在释放 (touchUp) 时根据与目标身体的距离和方向施加方向力。当您触地时,目标身体保持静止,然后在触地时沿所需轨迹施加力。

(非常类似于愤怒的小鸟——当你拿着弹弓时,你可以看到目标身体的虚线轨迹——我也想做同样的事情)

所以我想这可能不是最难做的事情,但考虑到一些选项,我倾向于使用 MouseJointDef,但它会立即施加力(即目标立即移动 - 我希望它保持静止,然后一旦发生修饰事件然后施加力)

绘制轨迹的最简单方法是什么?我也在使用 Box2D。

4

1 回答 1

8

创建一个继承类的InputAdapter类,然后创建它的一个实例并注册它以监听触摸输入。

    Gdx.input.setInputProcessor(inputAdapter);

有 3 种方法可以处理触摸事件touch_down,您必须重写它们touch_draggedtouch_up

touch_down中,检查触摸位置是否在鸟区。如果是,则使布尔标志为真。

touch_dragged中,检查上面的标志,如果为真,计算触摸位置相对于小鸟射击中心的距离和射击角度。

touch_up中,您可以通过调用以计算出的数量进行拍摄

    body2shoot.applyLinearImpulse(impulse, body2shoot.getWorldCenter());

无需MouseJointDef移动body2shoot. 只需将body2shoot触摸位置的变换设置为在每个渲染周期中拖动即可。

为了计算轨迹,我写了一个这样的类:

public class ProjectileEquation
{
public float gravity;
public Vector2 startVelocity = new Vector2();
public Vector2 startPoint = new Vector2();

public ProjectileEquation()
{   }

public float getX(float t)
{
    return startVelocity.x*t + startPoint.x;
}

public float getY(float t)
{
    return 0.5f*gravity*t*t + startVelocity.y*t + startPoint.y;
}
}

并且为了绘制它,我只设置了startPointandstartVelocity然后在一个循环中我t递增地给出一个(时间)并调用getX(t)and getY(t)

于 2012-05-05T13:11:42.033 回答