2016-05-19 3 views
0

ゲームの開始時にノードが2〜3秒間落ちるのを止めようとしています。だから私の問題は、私はノードが既に画面の途中にあることを開始するときです。私はまた、ノードの高さを変更しようと試みましたが、私はFPSが低すぎるように注意したいので、コストのかかるソリューションのように思えます。私のコードでは、didMoveToViewでこれを実行しようとしていますが、waitForDurationを使用していますが、動作しません。SpriteKit Scene(SWIFT)でdidMoveToViewのwaitForDurationを使用して、スポーンノードを遅延しようとしましたが、動作しません。

Example Image of Nodes Falling Down

どれSpriteKitベースのマスターは、私が何をすべきか知っていますか?私はスイフトを使用しています。

override func didMoveToView(view: SKView) { 

      let wait = SKAction.waitForDuration(2.5) 
      let run = SKAction.runBlock { 
       self.spawnNumbers() 
      } 
      numContainer.runAction(SKAction.sequence([wait, run])) 
    } 

func spawnNumbers() { 

     let minValue = self.size.width/8 
     let maxValue = self.size.width - 36 

     let spawnPoint = CGFloat(arc4random_uniform(UInt32(maxValue - minValue))) 
     let action = SKAction.moveToY(-300, duration: 2) 

     numContainer = SKSpriteNode(imageNamed: "Circle") 
     numContainer.name = "Circle" 
     numContainer.size = CGSize(width: 72, height: 72) 
     numContainer.anchorPoint = CGPointMake(0, 0) 
     numContainer.position = CGPoint(x: spawnPoint, y: self.size.height) 
     numContainer.runAction(SKAction.repeatActionForever(action)) 
     numContainer.zPosition = 2 

     let numberLabel = SKLabelNode(fontNamed: "AvenirNext-Bold") 
     numberLabel.text = "\(numToTouch)" 
     numberLabel.name = "Label" 
     numberLabel.zPosition = -1 
     numberLabel.position = CGPointMake(CGRectGetMidX(numContainer.centerRect) + 36, CGRectGetMidY(numContainer.centerRect) + 36) 
     numberLabel.horizontalAlignmentMode = .Center 
     numberLabel.verticalAlignmentMode = .Center 
     numberLabel.fontColor = UIColor.whiteColor() 
     numberLabel.fontSize = 28 

     addChild(numContainer) 
     numContainer.addChild(numberLabel) 
     numContainerArray.append(numContainer) 
     numToTouch += 1 
    } 
+0

これは物理ベースですか?また、「私はcaになりたいから」と言うつもりでしたか? – cocojoe

+0

@cocojoeアプリは物理ベースではありません。 –

+0

だから 'spawnNumbers()'があなたのためにアクションを開始します、そして、それが呼び出される唯一の場所はこのアクションブロックにありますか? プレイヤーがスタートボタンを押した後にアクションシーケンスを使用してみませんか? 「自分のFPSを低く抑える」声明に好奇心をそそぐ種類? – cocojoe

答えて

0

は、私はあなたがNSTimeIntervalに2.5秒をキャストするために持っていると思う: ここに私のコードです

let wait = SKAction.waitForDuration(NSTimeInterval(2.5)) 

あなたはまた、あなたのシーンのinit機能にアクションを入れてみてください:

override init (size: CGSize) { 
    super.init(size: size) 

    //your code from before 
} 

また、問題があるかどうかはわかりませんが、これは通常の動作であり、動作します。

let wait = SKAction.waitForDuration(NSTimeInterval(2.5)) 
let action = SKAction.runBlock({() in self.spawnNumbers()}) 
let actionThenWait = SKAction.sequence([wait, action]) 
self.runAction(actionThenWait) 
関連する問題