2013-10-30 11 views
9

Ho creato la classe ereditata SKScene. Il problema è che a contatto del corpo del metodo della fisicadidBeginContact: contatto (SKPhysicsContact *) non invocato

- (void)didBeginContact:(SKPhysicsContact *)contact 

non viene richiamato soluzione può essere semplice, ma come principiante con kit sprite mi sono bloccato con questo.

Di seguito si riporta il codice

#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 

Grazie in anticipo.

+0

@Alexander cadono giù per toccarsi – raheem52

risposta

13

Dalla documentazione SKPhysicsWorld:

Un contatto si crea quando due corpi di fisica sovrapporsi e uno degli organismi di fisica ha una proprietà contactTestBitMask che si sovrappone a proprietà dell'altro corpo categoryBitMask.

È necessario assegnare i corpi di fisica a categoryBitMask e a contactTestBitMask. Si desidera creare prima le vostre categorie:

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

Avanti, assegnare categoria e di contatto bit test di maschere:

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

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

nota della documentazione SKPhysicsBody:

Per ottenere prestazioni ottimali, solo imposta i bit nella maschera dei contatti per le interazioni che ti interessano.

Problemi correlati