Cocos2d x 如何检测碰撞力?

Cocos2d x 如何检测碰撞力?,cocos2d-x,Cocos2d X,cocos2d-x中是否有任何方法可以检测碰撞力?我想根据碰撞力制作不同的音效,或者在某些情况下完全禁用音效 例如:当我对躺在地上的精灵执行scaleTo操作时,它开始每时每刻改变它的大小,因此它也每时每刻都会触地。每次点击应用程序都会播放音效。我只想在我的精灵从某个真实高度坠落时播放它。您是否在某个update()函数中检测到碰撞,不是吗?所以,您需要记住上一次update()调用的对象位置。大概是这样的: Vec2 previousPosition; void YourClass::upd

cocos2d-x中是否有任何方法可以检测碰撞力?我想根据碰撞力制作不同的音效,或者在某些情况下完全禁用音效


例如:当我对躺在地上的精灵执行scaleTo操作时,它开始每时每刻改变它的大小,因此它也每时每刻都会触地。每次点击应用程序都会播放音效。我只想在我的精灵从某个真实高度坠落时播放它。

您是否在某个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。

如果移动物体和障碍物,速度的计算将更加复杂,必须根据

进行。谢谢!但我相信这比你描述的更复杂。两个质量不同,速度矢量不同的物体呢。我如何计算它们碰撞时的力呢?当然,如果你有物理物体,最好计算冲量(速度或距离乘以质量),而不是距离。如果障碍物也移动了,你需要添加向量。但基本原则是一样的。