Android 以角度和速度应用于精灵的脉冲

Android 以角度和速度应用于精灵的脉冲,android,box2d,andengine,physics,Android,Box2d,Andengine,Physics,我正在使用andengine和box2d生成一个类似纸牌投掷的游戏。 我无法计算的是以下函数中第一个参数的正确向量,以使球以正确的速度和高度上升(其思想是球的高度不超过屏幕高度): 在pointX中,我使用值VectorExpoint-(CAMERA_WIDTH/2),它沿着手指绘制的向量方向移动,但脉冲值似乎无法正确获得,我使用的任何值(大约400)在每个设备上的工作方式都不同 为了使身体在下落之前能够移动到高度h,你需要它的初始垂直速度: v_y=sqrt(2*g*h),其中g是重力加速度

我正在使用andengine和box2d生成一个类似纸牌投掷的游戏。 我无法计算的是以下函数中第一个参数的正确向量,以使球以正确的速度和高度上升(其思想是球的高度不超过屏幕高度):


在pointX中,我使用值
VectorExpoint-(CAMERA_WIDTH/2)
,它沿着手指绘制的向量方向移动,但脉冲值似乎无法正确获得,我使用的任何值(大约400)在每个设备上的工作方式都不同

为了使身体在下落之前能够移动到高度
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);
}

因此,我只需设置速度

,以使身体在下落之前移动高度
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);
}

所以我只需要设置速度

,如何用这个初始速度v_y计算冲量?@vrunoa:看看box2d震源,如何用这个初始速度v_y计算冲量?@vrunoa:看看box2d震源