2013-10-30 14 views
9

私はSKScene継承クラスを作成しました。 問題は、物理学のボディ方式の接触に didBeginContact:(SKPhysicsContact *)連絡先が呼び出されていません

- (void)didBeginContact:(SKPhysicsContact *)contact 

が ソリューションは簡単なものでも呼び出されていないが、スプライトキットと初心者として、私はこれで立ち往生していますということです。以下は

コードは、事前に

#import "MyScene.h" 
@interface MyScene() 
@property BOOL contentCreated; 
@end 
@implementation MyScene 
- (id)initWithSize:(CGSize)size { 
    self = [super initWithSize:size]; 
    if (self) { 
     self.physicsWorld.contactDelegate = self; 
     self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
    } 
    return self; 
} 
- (void)didMoveToView:(SKView *)view 
{ 
    if (!self.contentCreated) { 
     [self buildWorld]; 
     self.physicsWorld.contactDelegate = self; 
    } 
} 

#pragma mark - World Building 
- (void)buildWorld { 
    NSLog(@"Building the world"); 
    SKSpriteNode * sprite1 = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(100,100)]; 
    sprite1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(100,100)]; 
    sprite1.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) +100); 

    SKSpriteNode * sprite2 = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(100,100)]; 
    sprite2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(100,100)]; 
    sprite2.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) - 100); 


    [self addChild:sprite1]; 
    [self addChild:sprite2]; 
} 
- (void)didBeginContact:(SKPhysicsContact *)contact 
{ 
    NSLog(@"contact"); 
} 

@end 

おかげです。 SKPhysicsWorldドキュメントから

+0

@アレクサンダー彼らはお互いに触れるために落ちる – raheem52

答えて

13

2人の物理学の遺体が重なると 物理体の一つが 他の身体のcategoryBitMask財産と重なっcontactTestBitMask性質を持っていたときに接点が作成されます。

フィジックスボディには、categoryBitMaskcontactTestBitMaskを割り当てる必要があります。唯一、最高のパフォーマンスを得るために

SKPhysicsBodyドキュメントから

sprite1.physicsBody.categoryBitMask = sprite1Category; 
sprite1.physicsBody.contactTestBitMask = sprite2Category; 

sprite2.physicsBody.categoryBitMask = sprite2Category; 
sprite2.physicsBody.contactTestBitMask = sprite1Category; 

注:

static const uint32_t sprite1Category = 0x1 << 0; 
static const uint32_t sprite2Category = 0x1 << 1; 

次は、カテゴリと接触テストビットマスクを割り当てる:あなたは最初のカテゴリを作成したいですあなたが興味を持っている の連絡先マスクのビットを設定してください。

関連する問題