2014-03-27 167 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