【问题标题】:Cocos2D/Box2d Setting velocity in only one axisCocos2D/Box2d 仅在一个轴上设置速度
【发布时间】:2015-09-24 17:30:02
【问题描述】:

我正在尝试使用 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;

}

但是,我很清楚,每当我改变一个轴的速度时,另一个轴就会得到一个。 问题是:我不能跑跳(跳会停止跑)。

我需要一些方法来一次只改变一个轴的速度,这样我的跳跃就不会干扰我的跑步。那或另一种方式来做完全相同的事情。由于我是游戏编程的新手,因此我对物理方面的想法持开放态度。

【问题讨论】:

  • 显然跳跃时不应该修改速度的.X:获取当前速度,设置新的.Y,设置为新速度。
  • 所以我现在使用 Vec2 v = PhysicsBody3->getVelocity();我只改变 v.y = 200;在向上箭头的情况下并使用physicsBody3->setVelocity(v);在向上箭头的情况下,它没有用,我的跑步仍然被跳跃打断
  • 为什么不使用 force/impluse?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多