当球的形状击中任何其他类型的形状时,我正在尝试播放“boing”的声音。哪个有效。但是效果有点太好了......
当球静止或开始滚动时,它会与接触的任何物体发生永久性碰撞,因此“嘭”的声音不断响起。
我在花栗鼠文档中找不到任何东西可以告诉我两件事何时永久碰撞。所以我想我必须以某种方式自己弄清楚,可能使用某种计时器来比较上次碰撞与当前碰撞。但这对我来说听起来很奇怪。
有没有人解决过这个问题?你是怎么解决的?
当球的形状击中任何其他类型的形状时,我正在尝试播放“boing”的声音。哪个有效。但是效果有点太好了......
当球静止或开始滚动时,它会与接触的任何物体发生永久性碰撞,因此“嘭”的声音不断响起。
我在花栗鼠文档中找不到任何东西可以告诉我两件事何时永久碰撞。所以我想我必须以某种方式自己弄清楚,可能使用某种计时器来比较上次碰撞与当前碰撞。但这对我来说听起来很奇怪。
有没有人解决过这个问题?你是怎么解决的?
我不认为我要说的是一个好的做法,但我相信它会解决你的问题:
对于每个对象,保留两个状态变量:(1)最后一个碰撞对象,(2)最后一个碰撞时间。
碰撞时,仅在碰撞对象不同(和一个球)或自上次碰撞后经过一定“增量时间”时才播放声音。然后记录最后的碰撞统计数据。
这非常简单且非常有效:
// In your ball interface
id lastCollisionObject;
double lastCollisionTime;
// When a collision occurs...
double now = GetTime();
id other = GetCollisionObject();
if ((now - lastCollisionTime) > 0.3 || other != lastCollisionObject) {
PlaySound(kBoingSound);
}
lastCollisionObject = other;
lastCollisionTime = now;
难道你不能在接触中断时播放你的“boing”声音吗?花栗鼠中有一个回调,typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, struct cpSpace *space, void *data)
这样一来,当它弹起时,您就会得到boings,但当它只是滚动时就不会。“当然,当它从你的形状滚落时,你也会得到一个,但这可能是一个特征,取决于你如何看待它。
花栗鼠的形状没有速度。他们依附于拥有它的身体。您可以像这样访问速度:“myShape.body->v”。我同意您应该能够检查速度是否超过某个阈值以了解何时发生“影响”。您还可以检查旋转速度以查看球是否在滚动。