如何检测碰撞力?

时间:2016-02-29 18:28:50

标签: cocos2d-x

cocos2d-x有没有办法检测碰撞力?在某些情况下,我想根据碰撞力制作不同的声音效果或完全禁用声音效果。

例如:当我对躺在地上的精灵执行scaleTo动作时,它会立刻开始改变它的大小,所以它每时每刻都会撞到地面。在每次点击时,应用程序都会播放音效。我想只在我的精灵从真正的高度落下时才玩它。

1 个答案:

答案 0 :(得分:0)

你是否在某些update()函数中检测到了碰撞,不是吗?因此,您需要记住先前update()调用中的对象位置。像这样:

Vec2 previousPosition;

void YourClass::update(float dt)
{
    …
    this->detectCollision();
    this->updatePhysics();
    this->makeSomethingElse();
    …
}

void YourClass::detectCollision()
{
    currentPosition = yourObject->getPosition();
    float distance = currentPosition.getDistance(previousPosition)
    if (obstacleRect.intersectsRect(yourObjectRect))
    {
        // collide handler 
        if (distance == 0)
            // do nothing
        if (distance > threshold)
            // play some sound
    }
    …
    previousPosition = currentPosition;
    …
}

取决于当前和上一个物体位置之间的距离,您可以计算物体的速度并估算它的力 在您的示例中,当对象通过ScaleTo碰撞时,其位置稳定,距离和速度= 0 如果移动物体和障碍物,速度计算会更复杂,必须根据rules of vector addition

进行