cocos2d-x有没有办法检测碰撞力?在某些情况下,我想根据碰撞力制作不同的声音效果或完全禁用声音效果。
例如:当我对躺在地上的精灵执行scaleTo动作时,它会立刻开始改变它的大小,所以它每时每刻都会撞到地面。在每次点击时,应用程序都会播放音效。我想只在我的精灵从真正的高度落下时才玩它。
答案 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
进行