次のコードがあります。
私のシーンで:
static const uint32_t enermyCategory = 0x1 << 0;
static const uint32_t fatherCategory = 0x1 << 1;
self.physicsWorld.contactDelegate = self;
//init ship
Ship *ship = [Ship getFather];
ship.position = CGPointMake(CGRectGetMaxX(self.frame) - ship.frame.size.width , ship.frame.size.height);
[self addChild: ship];
//init enermy
Enermy *ene = [[Enermy alloc] initWithImageNamed:enermyName gameScene:self];
ene.position = ship.position;
[self addChild:ene];
#pragma mark - Physics Delegate Methods
- (void)didBeginContact:(SKPhysicsContact *)contact{
NSLog(@"contact detected");
}
ご覧のとおり、最初から船とエネルギーの両方を同じ場所に設定しているため、常に衝突します。
両方のクラスについて、init メソッドに次のコードがあります。
//setup physics body
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.dynamic = NO;
self.physicsBody.categoryBitMask = enermyCategory; #shipCategory for ship
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = shipCategory; #enermyCategory for ship
私が見つけたのは、NSLogが呼び出されないため、物理的な衝突検出が機能しないことです.Apple開発者のチュートリアルからたくさん読んだことがあります. 画面上の船とエネルギーの画像が衝突しているのが見えます。