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