Cocos2D / Box2d仅在一个轴上设置速度

时间:2015-09-24 17:30:03

标签: c++ cocos2d-x box2d cocos2d-x-3.0

我试图用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;

}

然而,我很清楚,每当我改变一个轴的速度时,另一个轴就会得到一个。 问题是:我无法跑步和跳跃(跳跃停止了跑步)。

我需要一些方法一次只改变一个轴上的速度,这样我的跳跃就不会干扰我的跑步。这或其他方式做同样的事情。因为我是游戏编程的新手,所以我对物理学的想法持开放态度。

1 个答案:

答案 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方向移动。这是我的一个项目的代码,所以我可以确认它是有效的。