我有一个球(一个圆形的动态体)在重力条件下作用于表面(蹦床)。
当球撞击蹦床时(从A点到B点画出图片)我想对球进行一次冲击(蹦床表面正常)。
问题在于我现在使用:
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);
将球垂直(在表面上)向上发送(图中的红色方向),尽管它应该遵循某个逼真的轨迹(用黑色绘制)。
我如何运用冲动来获得逼真的跳跃?
即。请注意,我对球交叉的所有情况感兴趣。例如,球可以落在蹦床上,球仍然应该有正确的轨迹。
答案 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)