ios - cocos2d如何在碰撞不生效的情况下检测碰撞

标签 ios cocos2d-iphone spritebuilder

我有一个游戏,其中 kirby 将篮球投篮入网。我遇到的问题是检测射门是否得分。我在打开物理调试的情况下设置了场景,所以所有的物理体都是红色的。网中间的红色圆圈是我用来检测射门是否得分的主体。如果射门进入了圆圈,那么它就得分了。问题是我没有办法让镜头穿过圆圈并仍然检测到碰撞。 Scene

我试过这个,它设置球一碰到圆圈就成为传感器,一离开圆圈就设置为非传感器,让它通过但仍然击中地面。问题是最初的碰撞仍然有效,所以球会弹起一点,通常最终会撞击圆圈 2 到 3 次。

- (void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair goal:(CCNode *)goal wildcard:(CCNode *)ball
{
    ball.physicsBody.sensor = YES;
}

- (void)ccPhysicsCollisionSeparate:(CCPhysicsCollisionPair *)pair goal:(CCNode *)goal wildcard:(CCNode *)ball
{
    ball.physicsBody.sensor = NO;
}

最佳答案

如果使用其他两个碰撞委托(delegate)方法,就很简单了。在每一个中,您都可以确定是否应该发生碰撞,如果没有,则返回 NO 以告诉 Chipmunk 忽略碰撞,允许物体相互穿过。

- (BOOL)ccPhysicsCollisionPreSolve:(CCPhysicsCollisionPair *)pair 
                              goal:(CCNode *)goal
                              ball:(CCNode *)ball
{
    return NO;
}

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair
                           goal:(CCNode *)goal
                           ball:(CCNode *)ball
{
    return NO;
}

关于ios - cocos2d如何在碰撞不生效的情况下检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075441/

相关文章:

swift - Cocos2d Swift 中 CCActionCallBlock 的使用

ios - 无论应用程序状态如何,调用延迟 15 秒的方法

ios - 在 UICollectionView 中滚动时绕过 UIScrollViewDelegate

ios - 如何测试CMMotionManager是否正常工作?

c++ - 在 iPod Touch 上移植使用 cocos2d c++ 制作的游戏

cocos2d-iphone - 访问其他层中的对象 (cocos2d)

ios - 使用 Spritebuilder 建立内存(未检测到泄漏)

iOS - 以编程方式更改 CCFile Sprite 图像

ios - 如何编辑 Cocos2d 3.x sprite builder ccb 文件?

ios - 一次通过多个 id 搜索核心数据的优势与多个 id 背靠背搜索的优势