如何检查两个对象是否与Objective C相撞

时间:2018-01-19 03:38:06

标签: objective-c sprite-kit collision

我正在尝试检测两个物体是否发生碰撞。我已经按照代码中显示的方式设置了我的玩家和敌人。我正在使用Tiled并尝试让对象检测到播放器,但我无法检测到碰撞。任何意见,将不胜感激。谢谢。示例代码如下:

-(void)addEnemyAtX:(int)x y:(int)y {
self.enemy = [[Enemy alloc] initWithImageNamed:@"door_closed.png"];
self.enemy.position = CGPointMake(x, y);
self.enemy.zPosition = 15;
self.enemy.physicsBody = [SKPhysicsBody bodyWithTexture:self.enemy.texture size:self.enemy.texture.size];
self.enemy.physicsBody.affectedByGravity = NO;
self.enemy.physicsBody.allowsRotation = NO;
[self.map addChild:self.enemy];
  SKAction *action3 = [SKAction moveTo:CGPointMake(self.enemy.position.x + 200,self.enemy.position.y) duration:3.0];
  SKAction *action2 = [SKAction moveTo:CGPointMake(self.enemy.position.x,self.enemy.position.y) duration:3.0];
  SKAction *group = [SKAction repeatActionForever:[SKAction sequence:@[action3, action2]]];

  [self.enemy runAction:group];
}

1 个答案:

答案 0 :(得分:1)

首先需要设置玩家和敌人的物理categoryBitMask属性。

如果你的意思是'碰撞',即对象互相反弹,那么这应该自动发生,因为这是由物理机构的collisionBitMask控制的,但最初这是UInt32.Max,所以一切与一切相撞。

如果您实际上是指'联系',那么当对象触摸时您的didBegin代码会被调用,您需要设置contactTestBitMask,因为这最初为0,即没有任何联系。

编辑:

正如玛丽亚所说 - 设置代表并确保你的班级是SKPhysicsContactDelegate。如果不这样做,您的代码将不会收到任何联系人的通知。 (只有在需要接触检测时才需要这些步骤 - 碰撞不需要它们。

class GameScene: SKScene, SKPhysicsContactDelegate {
   physicsWorld.contactDelegate = self

我怀疑你想要在玩家和敌人触碰时发生一些事情,所以我认为你真的想要接触探测,而不是碰撞。