从触摸位置创建脉冲矢量

时间:2011-05-18 17:35:32

标签: objective-c cocos2d-iphone

想象我有一个球。用户触摸它并且球上升。目前,脉冲方向是静态的

ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter());

b2Vec2(20.0f,100.0f)

是脉冲矢量。我想要随机生成一个脉冲向量。我认为这应该通过在球上选择触摸位置来完成。

这个问题更多的是关于数学。如何根据触摸位置计算随机脉冲矢量?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

简单的解决方案是创建一个从球的位置到触摸位置的矢量,并使用它的缩放版本作为你的脉冲矢量。

编辑: 一些伪代码来计算这个向量

-(void) createImpulse(Vector touchPoint)
{
    //this is now a vector pointing from the touch point to the ball
    Vector diff = [ball->GetWorldCenter() vectorSubtract:touchPoint];
    //Generate a random float from 1/2 to 2
    float scale = randFloat(0.5f, 2.0f);
    //Scale the vector by the float
    Vector impulse = [diff scaleBy:scale];
    ball->ApplyLinearImpulse(b2Vec2(impulse.x, impulse.y), ball->GetWorldCenter() );
}