Cocos2D/Box2d 仅在一个轴上设置速度
Cocos2D/Box2d Setting velocity in only one axis
我正在尝试在 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;
}
但是,我很清楚,每当我改变一个轴的速度时,另一个轴也会改变速度。
问题是:我无法 运行 和跳跃(跳跃停止了 运行ning)。
我需要一些方法来一次只改变一个轴上的速度,这样我的跳跃就不会干扰我的 运行。那种或另一种方式来做完全相同的事情。由于我是游戏编程的新手,所以我对物理方面的想法持开放态度。
您应该使用 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 方向移动。这是我的一个项目的代码,因此我可以确认它是否有效。
我正在尝试在 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;
}
但是,我很清楚,每当我改变一个轴的速度时,另一个轴也会改变速度。 问题是:我无法 运行 和跳跃(跳跃停止了 运行ning)。
我需要一些方法来一次只改变一个轴上的速度,这样我的跳跃就不会干扰我的 运行。那种或另一种方式来做完全相同的事情。由于我是游戏编程的新手,所以我对物理方面的想法持开放态度。
您应该使用 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 方向移动。这是我的一个项目的代码,因此我可以确认它是否有效。