There are two physics bodies: an AirplaneNode
:
- (id)initAirplaneNode {
self = [super initWithImageNamed:@"airplane.png"];
if (self) {
self.name = @"player";
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size];
self.physicsBody.dynamic = NO;
self.physicsBody.affectedByGravity = NO;
self.physicsBody.categoryBitMask = AIRPLANE_CATEGORY;
self.physicsBody.contactTestBitMask = BULLET_CATEGORY;
}
return self;
}
and a BulletNode
:
- (id)initBulletNode {
self = [super initWithImageNamed:@"bullet.png"];
if (self) {
self.name = @"bullet";
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size];
self.physicsBody.dynamic = NO;
self.physicsBody.usesPreciseCollisionDetection = YES;
self.physicsBody.categoryBitMask = BULLET_CATEGORY;
self.physicsBody.contactTestBitMask = AIRPLANE_CATEGORY;
}
return self;
}
Both of them have physicsBody.dynamic
property set to NO
.
The problem is when a bullet hits an airplane, my SKScene
doesn't call didBeginContact
method. However, if I specify physicsBody.dynamic
property to YES
for either AirplaneNode
or BulletNode
, didBeginContact
is firing.
Is there a way to fix that?
PS: I really don't need my nodes to be dynamic, because it causes an unwanted behaviour: an airplane slightly moves when getting damaged and a bullet sometimes rotates when flying.
Non-dynamic (static) bodies never collide, they aren't meant to change their position in the first place.
Instead set their collisionBitMask
to 0 if you don't want them to be affected by collisions. Refer to the SKPhysicsBody reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With