2016-03-25 3 views
0

У меня есть пара маленьких весла, выровненных рядом друг с другом с размером примерно 50x10, постоянно движущихся слева направо и справа налево, что также случайным образом перестает двигаться время от времени и становится неподвижным. Есть шар, который падает на них, и, ударив веслом, если он не движется и неподвижен, мяч отскакивает от него и возвращается прямо назад. Однако, если весла двигаются, и мяч попадает на один из весла за это время, вместо того, чтобы мяч ударил их и вернул назад, он попадает в весло и начинает двигаться вправо или влево (в зависимости от того, в каком направлении находятся весла перемещение), возвращаясь назад. Я пытаюсь вернуть мяч обратно, даже если он попадает в весло, пока он движется (почти навсегда отскакивающий мяч от весла).Как остановить применение силы в SKSprtieNode?

Я пробовал пару разных способов решить эту проблему, но я думаю, что мне не хватает чего-то важного, что заставляет его вести себя так. Вот код:

class GameScene: SKScene, SKPhysicsContactDelegate { 
     let greenPaddle = SKSpriteNode(imageNamed: "Green") 
     var ball = SKSpriteNode() 

     let ballCategory: UInt32 = 1 << 0 
     let greenPaddleCategory: UInt32 = 1 << 1 

     override func didMoveToView(view: SKView) { 

      self.physicsWorld.contactDelegate = self 

      greenPaddle.position = CGPoint(x: 0, y: frame.size.height/-6.5) 
      greenPaddle.physicsBody = SKPhysicsBody(rectangleOfSize: greenPaddle.size) 
      greenPaddle.physicsBody!.affectedByGravity = false 
      greenPaddle.physicsBody!.dynamic = false 

      greenPaddle.physicsBody!.categoryBitMask = greenPaddleCategory 
      greenPaddle.physicsBody!.contactTestBitMask = ballCategory 


      ball = SKSpriteNode(imageNamed: "Red") 
      ball.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2) 
      ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.height/2) 
      ball.physicsBody!.friction = 0 
      ball.physicsBody!.restitution = 1 
      ball.physicsBody!.linearDamping = 0 
      ball.physicsBody!.allowsRotation = false 

     ball.physicsBody!.categoryBitMask = ballCategory 
     ball.physicsBody!.contactTestBitMask = greenPaddleCategory 

     addChild(circle) 
    } 

    func didBeginContact(contact: SKPhysicsContact) { 

     let bodyA = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyA : contact.bodyB 
     let bodyB = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyB : contact.bodyA 

     if (bodyA.categoryBitMask) == ballCategory && (bodyB.categoryBitMask) == greenPaddleCategory { 

      greenPaddle.physicsBody!.friction = 0 
      greenPaddle.physicsBody!.restitution = 0 
    } 

} 

ответ

0

Я действительно не понимаю проблему; однако вы забыли установить мир физики в didmovetoview.

self.physicsWorld.contactDelegate = self 

Если проблема заключается в том, что контакт не работает, это будет работать :)

+0

У меня есть, что в, забыл упомянуть об этом здесь. Я пытаюсь заставить мяч отскакивать от весла по прямой (вниз и вверх). Например, если весло перемещается слева направо, и мяч попадает в весло во время его движения, мяч будет подниматься, двигаясь вправо, а не прямо вверх, если это имеет смысл – Sharukh