我试图用Cocos2d x C ++中的Box2d用setVelocity模拟一些真实的跳跃物理。 我的命令如下:
switch (keyCode){
case EventKeyboard::KeyCode::KEY_LEFT_ARROW:
physicsBody->setVelocity(Vec2(75, 0));
mySprite1->setPhysicsBody(physicsBody3);
break;
case EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
physicsBody3->setVelocity(Vec2(-75,0));
mySprite1->setPhysicsBody(physicsBody3);
break;
case EventKeyboard::KeyCode::KEY_UP_ARROW:
physicsBody3->setVelocity(Vec2(0,200));
mySprite1->setPhysicsBody(physicsBody3);
break;
}
然而,我很清楚,每当我改变一个轴的速度时,另一个轴就会得到一个。 问题是:我无法跑步和跳跃(跳跃停止了跑步)。
我需要一些方法一次只改变一个轴上的速度,这样我的跳跃就不会干扰我的跑步。这或其他方式做同样的事情。因为我是游戏编程的新手,所以我对物理学的想法持开放态度。
答案 0 :(得分:0)
您应该使用ApplyLinearImpulse来获得您正在寻找的效果。
// Apply linear impulse only in x-direction
physicsBody->ApplyLinearImpulse(b2Vec(75, 0), physicsBody->GetPosition(), true);
// Apply the jump impulse
physicsBody->ApplyLinearImpulse(b2Vec(0, 200), physicsBody->GetPosition(), true);
以上代码将应用脉冲并添加到当前速度。这意味着当你跳跃时,你将继续沿着x方向移动。这是我的一个项目的代码,所以我可以确认它是有效的。