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;
}
}