0

我正在尝试构建一个以飞机为玩家的简单侧滚轴。因此,我想用简单但逼真的物理效果构建简单的飞行控制。我正在使用 cocos2D 和 Box2D。我有一个基本的系统工作,但无法让物理感觉正确。

我正在b2CircleShape根据用户的输入对平面(即 a )施加力。所以,基本上,如果用户向上推,body_->ApplyForce(b2Vec2(10,30), body_->GetPosition())就会被调用。同样,使用 for down -30。

这很有效,飞机随着向上/向下飞行,导致它俯冲或爬升。但就是感觉不对。攀爬时没有减速,潜水时也没有加速。我的简单解决方案远非简单。

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

4

2 回答 2

1

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

我做了以下简化:

  1. 阻力和推力不需要是两个力,而是推力的大小由当前速度调整(类似于安德鲁建议的空气阻力)。
  2. 重力由 box2d 中的 World 对象处理。
  3. 升力相等但与重力相反(当飞机飞行水平时)。
  4. 推力和升力是根据平面的角度设置的:基于身体的变换 R 列。

现在,用户只控制飞机的角度,然后调整推力和升力,并更新世界模拟。

这提供了良好的感觉模拟,但大大简化了。

于 2012-07-01T14:25:23.960 回答
-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);

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

于 2012-06-19T10:10:17.647 回答