我正在使用andengine和box2d来生成像纸张折腾的游戏。 我无法计算的是下面函数中第一个参数的正确向量,使球以正确的速度和高度上升(这个想法是球的高度不超过屏幕高度):
pelota_body.applyLinearImpulse(new Vector2(pointX, impulse), pelota_body.getWorldCenter());
在pointX中我使用值vectorXPoint-(CAMERA_WIDTH/2)
并且它朝向手指绘制的矢量方向,但是脉冲值I似乎无法正确使用我使用的任何值(aprox 400)在每个设备上工作不同。
答案 0 :(得分: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);
}
所以我只想设定速度