1

我正在使用 andengine 和 box2d 来生成像纸折腾这样的游戏。我无法计算的是以下函数中第一个参数的正确向量,以使球以正确的速度和高度上升(想法是球的高度不超过屏幕高度):

pelota_body.applyLinearImpulse(new Vector2(pointX, impulse), pelota_body.getWorldCenter());

在 pointX 中,我使用该值vectorXPoint-(CAMERA_WIDTH/2),它沿手指绘制的矢量的方向移动,但我似乎无法正确使用脉冲值,并且我使用的任何值(aprox 400)在每个设备上都不同。

4

1 回答 1

1

为了让身体h在跌倒之前达到高度,您需要它的初始垂直速度:

v_y = sqrt(2*g*h), 哪里g是重力加速度。

您可以基于此计算脉冲v_y或仅使用SetLinearVelocity方法。

编辑

//box2d source
inline void b2Body::ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point)
{
    if (m_type != b2_dynamicBody)
    {
        return;
    }

    if (IsAwake() == false)
    {
        SetAwake(true);
    }
    m_linearVelocity += m_invMass * impulse;
    m_angularVelocity += m_invI * b2Cross(point - m_sweep.c, impulse);
}

所以我会设置速度

于 2013-08-27T15:01:41.663 回答