Box2D的简单2D飞行物理

时间:2012-06-18 20:38:55

标签: cocos2d-iphone box2d game-physics

我正在尝试构建一个简单的侧卷轴,其中飞机是玩家。因此,我想用简单但逼真的物理构建简单的飞行控制。我正在使用cocos2D和Box2D。我有一个基本的系统工作,但只是不能让物理感觉正确。

我根据用户的输入对飞机施加力(b2CircleShape)。所以,基本上,如果用户向上推,则会调用body_->ApplyForce(b2Vec2(10,30), body_->GetPosition())。同样,对于down -30使用。

这样可行并且飞机上下飞行使其潜水或爬升。但它感觉不对。在攀登过程中没有减速,也没有在潜水期间加速。我的简单解决方案远非简单。

我怎样才能更好地感受飞机攀爬/潜水?

2 个答案:

答案 0 :(得分:1)

我最终简化了飞行中适用的基本力量:即推力,阻力,升力和重力。

我做了以下简化:

  1. 拖拽和推力不需要是两个力,而是通过当前速度调整推力的大小(类似于安德鲁的airResistance建议)。
  2. 重力由box2d中的World对象处理。
  3. 升力相等但与重力相反(当飞机处于飞行高度时)。
  4. 根据平面的角度设置推力和升力:基于身体的变换R列。
  5. 现在,用户只控制飞机的角度,然后调整推力和升力,更新世界模拟。

    这给人一种良好的感觉模拟,但大大简化了。

答案 1 :(得分:-1)

我会这样做:

float engineForce(/* possibly some params */)
{
    return SOME_CONSTANT;
}

float airResistance(float velocity /* possibly more params */)
{
    return CFT * velocity;
}

float resultForce = std::max(engineForce() - airResistance(), 0);

使用这种方法,您可以轻松地使用两个功能调整系统