【发布时间】:2013-11-01 05:57:41
【问题描述】:
有两个物理体: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;
}
还有一个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;
}
它们都将physicsBody.dynamic 属性设置为NO。
问题是当子弹击中飞机时,我的SKScene 不会调用didBeginContact 方法。但是,如果我为AirplaneNode 或BulletNode 指定physicsBody.dynamic 属性为YES,则didBeginContact 正在触发。
有没有办法解决这个问题?
PS:我真的不需要我的节点是动态的,因为它会导致不受欢迎的行为:飞机受损时会轻微移动,而子弹有时会在飞行时旋转。
【问题讨论】:
-
一个需要是动态的,然后它应该可以工作。即您的子弹可以是动态的,并且您通过动作移动它,它将具有碰撞检测功能。 Prob 需要设置它不受重力影响。
标签: ios objective-c collision-detection game-physics sprite-kit