MouseJointDef libgdx - 像愤怒的小鸟一样绘制轨迹线

2023-12-13

在 libgdx 游戏中

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

(与《愤怒的小鸟》非常相似 - 当你握住弹弓时,你可以看到目标身体的虚线轨迹 - 我想做同样的事情)

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

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


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

    Gdx.input.setInputProcessor(inputAdapter);

有3种方法来处理触摸事件touch_down, touch_dragged and touch_up你必须重写。

In touch_down,检查触摸位置是否在鸟类区域内。如果是,则将布尔标志设置为 true。

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

In 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;
}
}

为了绘制它,我设置了startPoint and startVelocity然后在循环中我给出一个t(时间)增量并调用getX(t) and getY(t).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MouseJointDef libgdx - 像愤怒的小鸟一样绘制轨迹线 的相关文章

随机推荐