2016-02-29 167 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