我正试图播放“boing”当球形击中任何其他形状时发出声音。哪个有效。但是工作得太好了......

当球停下来或开始滚动时,它会与任何接触的球发生永久性碰撞,因此“挥杆”声音不断响起。

我在chipmunk文档中找不到任何东西告诉我两件事何时发生永久性碰撞。所以我想我必须以某种方式弄清楚自己,可能是某种计时器,将最后一次碰撞与当前碰撞进行比较。但这对我来说听起来很糟糕。

有没有人解决过这个问题?你是怎么解决的?

有帮助吗?

解决方案

你不能只是玩你的“boing”吗?联系人破产时发出声音吗? 在chipmunk中有一个回调函数, typedef void(* cpCollisionSeparateFunc)(cpArbiter * arb,struct cpSpace * space,void * data)

这样,无论什么时候弹跳,你都可以获得,但是当它刚刚开始时就不会。 “当然,当你的形状滚动时你也会得到一个,但这可能是一个特征,取决于你如何看待它。

其他提示

我不认为我要说的是一个好习惯,但我相信它会解决你的问题:

  1. 对于每个对象,保留两个状态变量:(1)最后一个对象与之碰撞,(2)最后一次碰撞时间。

  2. 碰撞时,如果碰撞的物体不同(和球)或某个“增量时间”,则仅播放声音。自上次碰撞以来已经过去了。然后记录最后的碰撞统计数据。

  3. 这非常简单且非常有效:

    // 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;
    

形状在花栗鼠中没有速度。他们所附着的身体有它。你可以像这样访问速度:“myShape.body-> v”。我同意您应该能够检查速度是否超过某个阈值,以了解何时发生“影响”。您还可以检查旋转速度,看球是否在滚动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top