0
cocos2d-x有沒有辦法檢測碰撞力?在某些情況下,我想根據碰撞力做出不同的聲音效果或完全禁用聲音效果。如何檢測碰撞力?
例如:當我對位於地面上的精靈進行scaleTo動作時,它會開始每時每刻都在改變它的大小,因此它每時每刻都會觸碰到地面。在每一次擊中應用程序播放音效。只有當我的精靈從某個真實的高度落下時,我纔會玩它。
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.
如果移動物體和障礙物,速度的計算更加複雜,必須根據rules of vector addition
謝謝!但是我相信你描述的真的很複雜。 2個具有不同質量的物體,具有不同的速度矢量。我如何計算碰撞時的力? – Ksamp
當然,如果你有物理體更好地計算脈衝(速度或距離,我的例子乘以質量),而不是距離。如果障礙物也移動,則需要添加矢量。但基本原則是一樣的。 – alc77