phi*_*530 2 collision-detection ios sprite-kit skphysicsbody skphysicsworld
我有以下代码:
在我的场景中:
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");
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我一开始就将飞船和能量设置在同一位置,因此它们总是会发生碰撞。
对于这两个类,我在其 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
Run Code Online (Sandbox Code Playgroud)
我发现 NSLog永远不会被调用,因此物理碰撞检测永远不会起作用,我从苹果开发人员教程中阅读了很多内容,看起来与他们拥有的内容完全相同,不确定为什么不起作用。我可以看到屏幕上的飞船和能量图像相互碰撞。
将PhysicsBody 设置为dynamic = NO 不会影响接触。更可能的情况是您为两个节点设置相同的 contactBitMask 和 CategoryBitMask。您应该将船舶设置为具有以下功能:
self.physicsBody.categoryBitMask = shipCategory;
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = enermyCategory;
Run Code Online (Sandbox Code Playgroud)
敌人应该具备以下条件:
self.physicsBody.categoryBitMask = enermyCategory;
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = shipCategory;
Run Code Online (Sandbox Code Playgroud)
底线:它们应该在船上交换。
| 归档时间: |
|
| 查看次数: |
3207 次 |
| 最近记录: |