【问题标题】:How many pixels is an impulse in box2dbox2d中的脉冲是多少像素
【发布时间】:2011-09-21 03:03:18
【问题描述】:

我有一个你用空气吹的球。如果球靠近鼓风机,我希望球被吹得更多,如果离鼓风机更远,我希望球被吹得更少。我正在使用 box2d 并且正在使用脉冲函数。“body->ApplyLinearImpulse(force, body->GetPosition())”。我似乎无法找到一个公式或方法来实现这一点。如果我想让球吹到 300 像素的总距离,我怎么能做到这一点?请帮忙。

【问题讨论】:

    标签: iphone box2d game-physics box2d-iphone vimpulse


    【解决方案1】:

    如果您想在模拟之前计算距离,您必须查看 box2d 源。在模拟身体的速度时,会根据重力、额外施加的力、线性阻尼、角阻尼等进行修改。速度也依赖于速度迭代。

    但我认为,如果您想要一个真正平滑的动作(例如受到打击),您最好使用 applyForce 函数而不是脉冲。但请确保在每个模拟步骤中都施加力。

    编辑:

    您还可以将空气阻力模拟为: Fa = -k*V*V。我以这种方式模拟了管道中的运动。效果很好。

    所以每一步你都可以做这样的事情:

    BlowForce = k1 / distance; // k1 - coefficient
    Resistance = -k2 * V * V; //k2 - another coefficient
    TotalForce = BlowForce + Resistance;
    body->ApplyForce(TotalForce);
    

    【讨论】:

      【解决方案2】:

      我不是 2d 盒子专家,但我要做的是创建一个实际上不可见的小盒子,然后让球击中盒子......如果鼓风机吹得更多,我会给对面的盒子更多的速度方向。就 300 像素长度而言,您必须调整力和速度,以使球移动

      300/<your_rendering_window_to_physics_world_ratio>
      

      在物理世界中。

      【讨论】:

        【解决方案3】:

        力 = 质量 * 加速度,所以取你设置身体的质量,计算你想要的加速度(记得用 300px 除以 PTM_RATIO),然后将两者相乘。

        【讨论】:

        • 不正确。如果你的身体有恒定的加速度,它就不会停止。速度将改变为 v = a*t。示例将是重力:加速度 = 9.8。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        相关资源
        最近更新 更多