好的,这是交易: 我正在开发一款适用于iOS的Sprite Kit中的2D汽车游戏(类似于Hill Climb Racing)。我正在研究灰尘颗粒,当轮胎接触到具有这种效果的表面时,灰尘颗粒会出现。为此,我显然需要函数'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 Kit无法跟上快速移动的东西,如果发生突然和快速的事情,它会弄乱这些函数调用。我试过这个:
leftWheel.physicsBody.usesPreciseCollisionDetection = YES;
rightWheel.physicsBody.usesPreciseCollisionDetection = YES;
但它没有帮助。 Sprite Kit中的碰撞检测仍然缺少一些发生得非常快的碰撞。
有解决方案吗?问题是Sprite Kit只在碰撞开始或结束时调用此函数。因此,如果它弄乱了其中一个函数调用,那么它会让剩下的代码相信轮子没有接触到地面。是否有解决方案来检查每帧的碰撞?这会有很大的帮助!
Here's an image visualizing the problem
我希望我能清楚地描述这个问题。感谢您提前提供任何帮助!