2017-11-23 12 views
1

私は基本的なブレイクアウトゲームフレームの作業を使用しています。私はスペースバーを使ってボールを追加したいと思います。私は球が現れる点までそれを持っていますが、衝動をかけることができずに跳ね返ります。私は彼らにx秒の寿命を持たせたいと思う。ここに、コードの関連する圧縮部分があります。 OSX/MacOSのためのXcode 9を使用してmacOSのスペースバーを使用してSKSpriteNodeを追加

イムないiOSの迅速な4 10.13.2

override func keyDown(with event: NSEvent) { 
     let keyEvent = event.characters 
     if keyEvent == " "{print("space bar") 

      // Create sprite 
      let myBall = SKSpriteNode(imageNamed: "greenball") 
      myBall.zPosition = 1 
      myBall.xScale = 1 
      myBall.yScale = 1 

      // Determine where to spawn the ball along the Y axis 
      let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0 

      // Position the ball 
      myBall.position = CGPoint(x: 460.0, y: actualY) 

      // Determine speed of the ball 
      let actualDuration:CGFloat = 4.0 

      myBall.physicsBody?.isDynamic = true 
      myBall.physicsBody?.affectedByGravity = true 
      myBall.physicsBody?.friction = 1 
      myBall.physicsBody?.restitution = 1 
      myBall.physicsBody?.mass = 0.0035744346678257 

      addChild(myBall) 

      myBall.physicsBody?.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ?? 
     } 
    } 
+0

をやってお勧めしないことを決定した場合、ここで質問がありますか? – Ssswift

+0

こんにちは、applyImpulseが機能しないのはなぜですか? 。そして、ボールの寿命をどのように設定するのですか? – oldman

+0

物理学のボディを作成するのを忘れてしまった – Knight0fDragon

答えて

2

あなたは常に物理体を作成するために覚えておく必要があります。私は使用することをお勧めします!の代わりに ?あなたがオプションを扱っているとき。つかいます ?あなたの結果がnilであると予想した場合にのみ、それ以外の場合は、デバッグ中にプログラムがクラッシュして、エラーが発生していることがわかります。

override func keyDown(with event: NSEvent) { 
    let keyEvent = event.characters 
    if keyEvent == " "{print("space bar") 

     // Create sprite 
     let myBall = SKSpriteNode(imageNamed: "greenball") 
     myBall.zPosition = 1 
     myBall.xScale = 1 
     myBall.yScale = 1 

     // Determine where to spawn the ball along the Y axis 
     let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0 

     // Position the ball 
     myBall.position = CGPoint(x: 460.0, y: actualY) 

     // Determine speed of the ball 
     let actualDuration:CGFloat = 4.0 
     myBall.physicsBody = SKPhysicsBody(circleOfRadius:myBall.size.width /2) 
     myBall.physicsBody!.isDynamic = true 
     myBall.physicsBody!.affectedByGravity = true 
     myBall.physicsBody!.friction = 1 
     myBall.physicsBody!.restitution = 1 
     myBall.physicsBody!.mass = 0.0035744346678257 

     addChild(myBall) 

     myBall.physicsBody!.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ?? 
    } 
} 

あなたは怠惰になりたい、とクリーンなコードを書きたい、そして私はif letまたはguard let

override func keyDown(with event: NSEvent) { 
    let keyEvent = event.characters 
    if keyEvent == " "{ 
     print("space bar") 

     // Create sprite 
     let myBall = SKSpriteNode(imageNamed: "greenball") 
     myBall.zPosition = 1 
     myBall.xScale = 1 
     myBall.yScale = 1 

     // Determine where to spawn the ball along the Y axis 
     let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0 

     // Position the ball 
     myBall.position = CGPoint(x: 460.0, y: actualY) 

     // Determine speed of the ball 
     let actualDuration:CGFloat = 4.0 
     if let physicsBody = SKPhysicsBody(circleOfRadius:myBall.size.width/1) 
     { 
      physicsBody.isDynamic = true 
      physicsBody.affectedByGravity = true 
      physicsBody.friction = 1 
      physicsBody.restitution = 1 
      physicsBody.mass = 0.0035744346678257 //<-- You really shouldnt mess with this unless you know what you are doing with mass 
      myBall.physicsBody = physicsBody 
     } 
     addChild(myBall) 

     myBall.physicsBody?.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ?? 
    } 
} 
関連する問題