2016-03-25 5 views
0

Ich habe ein paar kleine Paddel nebeneinander angeordnet mit einer Größe von ungefähr 50x10, die sich ständig von links nach rechts und von rechts nach links bewegen, die auch zufällig von Zeit zu Zeit aufhören würden, sich zu bewegen und stationär zu werden. Es gibt einen Ball, der zu ihnen hin abfällt, und wenn er auf ein Paddel trifft, wenn es sich nicht bewegt und stationär ist, wird der Ball von ihm abprallen und direkt wieder hochgehen. Wenn sich die Paddles jedoch bewegen und der Ball während dieser Zeit auf eines der Paddles trifft, schlägt der Ball nicht direkt auf den Schläger, sondern auf das Paddel und bewegt sich entweder nach rechts oder links (je nachdem, in welche Richtung die Paddles stehen) Bewegen), während Sie wieder aufstehen. Ich versuche, den Ball wieder hochzufahren, selbst wenn er auf das Paddel trifft, während es sich bewegt (so ziemlich ein ewig hüpfender Ball gegen die Paddel).Wie kann man verhindern, dass eine Kraft auf SKSprtieNode angewendet wird?

Ich habe einige verschiedene Möglichkeiten ausprobiert, um dieses Problem zu lösen, aber ich denke, ich vermisse etwas Wichtiges, das es so verhält. Hier ist der Code:

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 
    } 

} 

Antwort

0

Ich verstehe nicht wirklich das Problem; Sie haben jedoch vergessen, die Physikwelt in der Didmovetoview zu setzen.

self.physicsWorld.contactDelegate = self 

Wenn das Problem ist, dass der Kontakt nicht funktionieren, das funktionieren würde :)

+0

Ich habe, dass es in, vergessen, es hier zu erwähnen. Ich versuche, den Ball in einer geraden Linie (nach unten und oben) von den Paddeln abprallen zu lassen. Wenn sich das Paddel beispielsweise von links nach rechts bewegt und der Ball während der Bewegung auf das Paddel trifft, bewegt sich der Ball nach oben, während er sich nach rechts und nicht gerade nach oben bewegt, wenn dies sinnvoll ist – Sharukh

Verwandte Themen