2014-09-29 121 views
0

我有一个SKSpriteNode碰撞并从另一个SKSpriteNode反弹。我想要的是能够检测到碰撞,但没有反弹。我希望它反弹其他节点,但不是这个。那可能吗?防止SKSpriteNode反弹其他SKSpriteNode

self.physicsWorld.contactDelegate = self; 
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
self.physicsWorld.gravity = CGVectorMake(0.0f, 0.0f); 


self.zone = [SKSpriteNode spriteNodeWithImageNamed:@"Oval.png"]; 
self.zone.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); self.zone.xScale = 0.3; 
self.zone.yScale = 0.3; 

self.zone.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.zone.frame.size.width/2]; 
self.zone.physicsBody.restitution = 0.0f; 
self.zone.physicsBody.density = 0; 
self.zone.physicsBody.friction = 0.4f; 
self.zone.physicsBody.categoryBitMask = zoneCategory; 
self.zone.physicsBody.dynamic = NO; 


self.ball = [SKSpriteNode spriteNodeWithImageNamed:@"Ball.png"]; 
self.ball.position = CGPointMake(80,0); 
self.ball.name = @"BallNode";//how the node is identified later 
self.ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.ball.frame.size.width/2]; 
self.ball.physicsBody.restitution = 0.1f; 
self.ball.physicsBody.friction = 0.4f; 
self.ball.physicsBody.categoryBitMask = ballCategory; 
self.ball.physicsBody.dynamic = NO; 

我不想让球和区域反弹。有任何想法吗?

回答

0

设置collisionBitMask和这两个机构 喜欢的contactTestBitMask

self.zone.collisionBitMask = 0xFFFFFFFF & (~ballCategory); 
self.ball.collisionBitMask = 0xFFFFFFFF & (~zoneCategory); 
self.zone.contactTestBitMask = ballCategory; 

那么当发生接触时预计的SKPhysicsContactDelegatedidBeginContact:调用。 将不会有collsion。

+1

你应该这样做:self.zone.collisionBitMask&=〜ballCategory; – 0x141E 2014-09-30 18:28:38