2016-06-13 4 views
1

У меня есть три категории физики: герой, земля и стена. Моя проблема в том, что физическая категория для земли не распознается. Чтобы устранить проблему, я напечатал бит-маски, когда герой сталкивается со стеной и землей. Стена работает так, как ожидалось, и показывает свою битовую маску 2. Земля, однако, показывает 4294967295. (Это должно быть 4.) На земле есть физическое тело края, и оно работает, потому что герой не проходит через него, его просто не признают земля.SpriteKit categoryBitMask не распознается

Physics категории

enum PhysicsCategory:UInt32 
{ 
    case hero = 1 
    case wall = 2 
    case ground = 4 
} 

Первый класс:

class Ground: SKSpriteNode 
{ 
    var groundTexture = SKTexture(imageNamed: "ground4") 
    var jumpWidth = CGFloat() 
    var jumpCount = CGFloat(1) 

    func spawn(parentNode: SKNode, position: CGPoint, size:CGSize) 
    { 
     parentNode.addChild(self) 
     self.size = size 
     self.position = position 
     self.zPosition = 2 
     self.anchorPoint = CGPointMake(0, 1) 
     self.texture = SKTexture(imageNamed: "ground4") 
     self.physicsBody?.categoryBitMask = PhysicsCategory.ground.rawValue 
     self.physicsBody?.affectedByGravity = false 
     self.physicsBody?.dynamic = false 

     let pointTopRight = CGPoint(x: size.width, y: 0) 
     self.physicsBody = SKPhysicsBody(edgeFromPoint: CGPointZero, toPoint: pointTopRight) 
    } 

didMoveToView:

let groundPosition = CGPoint(x: -self.size.width, y: 30) 
let groundSize = CGSize(width: self.size.width * 3, height: 0) 
ground.spawn(world, position: groundPosition, size: groundSize) 

didBeginContact

let firstBody = contact.bodyA 
let secondBody = contact.bodyB 

if firstBody.categoryBitMask == PhysicsCategory.hero.rawValue && secondBody.categoryBitMask == PhysicsCategory.ground.rawValue || firstBody.categoryBitMask == PhysicsCategory.ground.rawValue && secondBody.categoryBitMask == PhysicsCategory.hero.rawValue 
     { 
      print("contact with the ground!") 
     } 

ответ

1

Вы на самом деле создаете физическое приложение после, которое вы пытались установить для категорииBitMask. Таким образом, вы пытаетесь установить categoryBitMask на ноль ...

Вам просто нужно двигаться, что одна линия вверх ...

func spawn(parentNode: SKNode, position: CGPoint, size:CGSize) 
{ 
    parentNode.addChild(self) 
    self.size = size 
    self.position = position 
    self.zPosition = 2 
    self.anchorPoint = CGPointMake(0, 1) 
    self.texture = SKTexture(imageNamed: "ground4") 
    let pointTopRight = CGPoint(x: size.width, y: 0) 

    self.physicsBody = SKPhysicsBody(edgeFromPoint: CGPointZero, toPoint: pointTopRight) 

    self.physicsBody?.categoryBitMask = PhysicsCategory.ground.rawValue 
    self.physicsBody?.affectedByGravity = false 
    self.physicsBody?.dynamic = false 
} 
+1

Я знаю, что я должен не сказать спасибо в комментариях, но я рискну это за это ... спасибо !!!! – squarehippo10