2016-06-25 2 views
0

Вот мой didBeginContact:Мой код обнаруживает столкновения со спрайтом, но не сталкивается? - Swift

func didBeginContact(contact: SKPhysicsContact) { 


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


    let ballWasContacted = firstBody.categoryBitMask == PhysicsCat.Ball || secondBody.categoryBitMask == PhysicsCat.Ball 
    let wallWasContacted = firstBody.categoryBitMask == PhysicsCat.Wall || secondBody.categoryBitMask == PhysicsCat.Wall 
    let wallCheckWasContacted = firstBody.categoryBitMask == PhysicsCat.wallSpace || secondBody.categoryBitMask == PhysicsCat.wallSpace 
    let scoreWasContacted = firstBody.categoryBitMask == PhysicsCat.Score || secondBody.categoryBitMask == PhysicsCat.Score 
    let boundaryWasContacted = firstBody.categoryBitMask == PhysicsCat.Boundaries || secondBody.categoryBitMask == PhysicsCat.Boundaries 


    if boundaryWasContacted { 

     print("I collided with the boundary.") 

     } 

Вот моя граница спрайт узел:

let boundary = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 50, height: 150)) 
    boundary.name = "boundary" 
    boundary.position = CGPoint(x: self.frame.width/1.37, y: self.frame.height/2) 
    boundary.physicsBody = SKPhysicsBody(rectangleOfSize: boundary.size) 
    boundary.physicsBody!.categoryBitMask = PhysicsCat.Boundaries 
    boundary.physicsBody?.contactTestBitMask = PhysicsCat.Ball 
    boundary.physicsBody?.collisionBitMask = PhysicsCat.Ball 
    boundary.physicsBody!.dynamic = false 
    boundary.physicsBody!.friction = 0 
    boundary.physicsBody!.restitution = 1 
    boundary.zPosition = 5 
    self.addChild(boundary) 

И, наконец, вот мой шар:

Ball = SKSpriteNode(imageNamed: "Ball") 
    Ball.size = CGSize(width: 38, height: 38) 
    Ball.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
    Ball.physicsBody = SKPhysicsBody(circleOfRadius: Ball.frame.width/2) 
    Ball.physicsBody?.categoryBitMask = PhysicsCat.Ball 
    Ball.physicsBody?.collisionBitMask = PhysicsCat.Wall 
    Ball.physicsBody?.contactTestBitMask = PhysicsCat.Wall | PhysicsCat.Score | PhysicsCat.wallSpace | PhysicsCat.Boundaries 
    Ball.physicsBody?.affectedByGravity = false 
    Ball.physicsBody?.dynamic = true 
    Ball.physicsBody!.allowsRotation = true 
    Ball.zRotation = CGFloat(M_PI) 
    self.addChild(Ball) 

Когда я пришел в контакт с граница, он печатает «Я столкнулся с границей», но я прохожу через нее. Что именно мне не хватает из моего кода, чтобы получить фактическое столкновение между мячом и границей?

ответ

1

Alter you didBeginКонтакт, чтобы что-то сделать на контакте.

Этот вопрос задан, и решение в этой теме - это применение Impluse в вашем делеBeginContact.

В настоящее время у вас есть только заявление о печати. Попробуйте добавить соответствующий код, как в этом ответе.

https://stackoverflow.com/a/29433778/6407353

+0

Что-то сделал. Теперь, когда я сталкиваюсь с границей, граница исчезает ... Я бы хотел, чтобы мяч просто ударил ее и немного отскакивал, а не исчезал. –

Смежные вопросы