Ios 雪碧套装&x27;s';didBeginContact';函数不是很精确。我该怎么办?

Ios 雪碧套装&x27;s';didBeginContact';函数不是很精确。我该怎么办?,ios,objective-c,xcode,collision-detection,sprite-kit,Ios,Objective C,Xcode,Collision Detection,Sprite Kit,好吧,交易如下: 我正在为iOS开发一款2D汽车游戏(类似于爬山比赛)。我目前正在研究灰尘颗粒,当轮胎接触到指定有这种效果的表面时,灰尘颗粒就会出现。为此,我显然需要“didBeginContact”和“didEndContact”功能,以便根据轮胎是否接触地面打开/关闭效果。 以下是我想做的: /* ---- very dirty pseudocode ---- */ didBeginContact { if (contact.bodyA is one of the wheels &

好吧,交易如下: 我正在为iOS开发一款2D汽车游戏(类似于爬山比赛)。我目前正在研究灰尘颗粒,当轮胎接触到指定有这种效果的表面时,灰尘颗粒就会出现。为此,我显然需要“didBeginContact”和“didEndContact”功能,以便根据轮胎是否接触地面打开/关闭效果。 以下是我想做的:

/* ---- very dirty pseudocode ---- */

didBeginContact {
    if (contact.bodyA is one of the wheels &&
        contact.bodyB is the surface that should make a dust effect) {
        engage dust effect
    }
}

didEndContact {
    if (contact.bodyA is one of the wheels &&
        contact.bodyB is the surface that should make a dust effect) {
        disable the dust effect
    }
}
这在大多数情况下都适用。但问题是: 如果一个或两个车轮脱离地面的时间非常短(比如说车辆撞上了导致突然停车的东西,或者以高速行驶在一些颠簸的地方),则效果往往会停止,即使车轮实际接触到表面,直到车轮抬离地面并再次接触地面,效果才会显示。 我觉得Sprite工具包跟不上快速移动的东西,如果突然发生快速的事情,它会把这些函数调用搞得一团糟。我确实试过:

leftWheel.physicsBody.usesPreciseCollisionDetection   = YES;
rightWheel.physicsBody.usesPreciseCollisionDetection  = YES;
但这没用。Sprite工具包中的碰撞检测仍然遗漏了一些发生得非常快的碰撞

有解决办法吗?问题是,Sprite工具包仅在碰撞开始或结束时调用此函数。因此,如果它弄乱了一个函数调用,那么它会让代码的其余部分相信车轮没有接触地面。是否有解决方案来检查每一帧的碰撞?那会很有帮助的


我希望我清楚地描述了这个问题。提前谢谢你的帮助

您可以使用精灵的属性检查车轮与地面之间的电流接触。轮询此方法可能不如事件驱动方法有效,但它可能更可靠。

当您遇到问题时,您的地面/车轮
所有ContactedBody
包含哪些内容?哇,我到目前为止还不知道该方法。轮子的AllContactedBody实际上包含地面对象,即使缺少粒子效果。谢谢你,伙计!我将使用此方法而不是didBeginContact方法来打开/关闭效果。这应该能解决问题。我会加上它作为答案