2014-03-27 118 views
1

我试图检查两个物体的碰撞碰撞,但碰撞检测回调没有被解雇。 这是我的代码:cocos2d v3碰撞检测

1)我CCScene实现CCPhysicsCollisionDelegate协议

2)I设置碰撞委托物理

_physics = [CCPhysicsNode node]; 
_physics.gravity = PHYSICS_GRAVITY; 
_physics.debugDraw = YES; 
_physics.collisionDelegate = self; 
[self addChild:_physics]; 

3)对于每两个主体的予设定的碰撞类型

body1.collisionType  = @"body1"; 
body2.collisionType  = @"body2"; 

4)就是这样,当这两个物体发生碰撞时,没有任何CCPhysicsCollisionDelegate回调方法被调用。

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair typeA:(CCNode *)nodeA  typeB:(CCNode *)nodeB 
{ 
    NSLog(@"HELLO"); 
    return YES; 
} 

您能帮我解决吗?您是否能够在cocos2d v3中收到碰撞回调?

在此先感谢

+0

你可以发布你的回调方法吗? –

+0

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)对类型A:(CCNode *)nodeA typeB:(CCNode *)nodeB NSLog(@“HELLO”); 返回YES; } – Leonid

+0

我试过新的cocos2d模板项目,所以我基本上设置_physics.collisionDelegate = self;但无论如何回调不会被解雇 – Leonid

回答

3

在cocos2d V3物理学,collisionType无需设置整数位掩码来定义碰撞类型。参数名称CCPhysicsCollisionDelegate方法必须是您想要处理的碰撞类型。所以你的情况,碰撞回调方法应该是

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair body1:(CCNode *)nodeA  body2:(CCNode *)nodeB 
{ 
    NSLog(@"HELLO"); 
    return YES; 
} 

默认情况下,一切碰撞在cocos2d,但如果你设置两个collisionGroup机构是一样那么他们就不会发生冲突。

+0

非常感谢,它的工作原理!其他问题是:是否有可能使两个物体不会相互碰撞,而是在它们相交时能够获得回调? – Leonid

+0

好的,我明白了。我只是从ccPhysicsCollisionBegin返回NO – Leonid

+0

是的,我遇到了同样的问题,并且volatile ..没有注意到我需要捕获回调方法的签名: – REALFREE