5、wxWidget之Box2D各种力?

void Simple::OnKeyDown(wxKeyEvent& event)
{
    b2Vec2 velRect = bodyRect->GetLinearVelocity();//获取线速度
    float force= 0;
    switch(event.GetKeyCode())
    {
    case WXK_LEFT:
        //应用逐渐向上的力.在世界点施加力。
        //如果力不在质心,则会产生扭矩并影响角速度。
        bodies[0]->ApplyForce(b2Vec2(0,50),bodies[0]->GetWorldCenter(),true);
        break;
    case WXK_RIGHT:
        bodies[0]->ApplyForce(b2Vec2(0,50),b2Vec2(10,10),true);
        //对质心施加力
        bodies[1]->ApplyForceToCenter(b2Vec2(0,10),true);//,bodies[0]->GetWorldCenter(),true);
        break;
    case WXK_UP:
        //设置身体的原点 和 旋转的角度。
        //意思是设置某一物体到达某一个位置和角度(到达该角度后不动。除非有其它的外力)
        bodies[0]->SetTransform(bodies[0]->GetWorldCenter(),b2Rot(-45).GetAngle());
        //施加扭矩,逐步顺时针
        bodies[2]->ApplyTorque(b2Rot(45).GetAngle(),false);
//        bodies[2]->SetTransform(b2Vec2(0,1),1);
        break;
    case WXK_DOWN:
        //立即向上的力。作用到质心
        bodies[0]->ApplyLinearImpulse(b2Vec2(0,50),bodies[0]->GetWorldCenter(),false);
        //施加角脉冲,45为顺时针 负数逆时针
        bodies[2]->ApplyAngularImpulse(b2Rot(45).GetAngle(),false);
        break;

    case 87://w
        force = velRect.x * -10;
        bodyRect->ApplyForce(b2Vec2(force,0),bodyRect->GetWorldCenter(),false);
        break;
    case 83://s
        bodyRect->ApplyLinearImpulseToCenter(b2Vec2(bodyRect->GetMass()*10.0,0)
                                             ,false);
        break;
    case 65://a
        if(velRect.x >-5) force = -50;
        bodyRect->ApplyForce(b2Vec2(force,0),bodyRect->GetWorldCenter(),false);
        break;
    case 68://d
        if(velRect.x <5) force = 50;
        bodyRect->ApplyForce(b2Vec2(force,0),bodyRect->GetWorldCenter(),false);
        break;
    case 66://b
        bodyRect->ApplyTorque(b2Rot(45).GetAngle(),false);//不起作用???
        //哦,原来是上面设置的defRect.fixedRotation=true; 这是固定旋转的意思?
        break;
    case WXK_F1:
        break;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值