计算一定角度的box2d脉冲

时间:2012-03-29 11:41:36

标签: iphone objective-c box2d

我有一个球(一个圆形的动态体)在重力条件下作用于表面(蹦床)。

当球撞击蹦床时(从A点到B点画出图片)我想对球进行一次冲击(蹦床表面正常)。

enter image description here

问题在于我现在使用:

 b2Vec2 impulse = b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce);

 b2Vec2 impulsePoint = _body->GetWorldPoint(b2Vec2(0/PTM_RATIO, -1.0/PTM_RATIO));

 _body->ApplyLinearImpulse(impulse, impulsePoint);

将球垂直(在表面上)向上发送(图中的红色方向),尽管它应该遵循某个逼真的轨迹(用黑色绘制)。

我如何运用冲动来获得逼真的跳跃?

即。请注意,我对球交叉的所有情况感兴趣。例如,球可以落在蹦床上,球仍然应该有正确的轨迹。

1 个答案:

答案 0 :(得分:4)

我不读取Objective-C,但问题似乎很清楚:

您的冲动b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce)实际上并不包含任何x组件!

将你的冲动分成x和y分量(伪代码):

Impulse_magnitude = Ball_mass * Trampoline_Force
# theta is the angle between the horizontal and your impulse
# this will depend on the angle of the trampoline.
Impulse_x = Impulse_magnitude * Cos(theta)
Impulse_y = Impulse_magnitude * Sin(theta)
# Create your impulse vector
Impulse_v = b2Vec(Impulse_x, Impulse_y)