2016-02-29 138 views
0

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

例如:当我对位于地面上的精灵进行scaleTo动作时,它会开始每时每刻都在改变它的大小,因此它每时每刻都会触碰到地面。在每一次击中应用程序播放音效。只有当我的精灵从某个真实的高度落下时,我才会玩它。

回答

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

+0

谢谢!但是我相信你描述的真的很复杂。 2个具有不同质量的物体,具有不同的速度矢量。我如何计算碰撞时的力? – Ksamp

+0

当然,如果你有物理体更好地计算脉冲(速度或距离,我的例子乘以质量),而不是距离。如果障碍物也移动,则需要添加矢量。但基本原则是一样的。 – alc77