2016-08-09 6 views
0

13ラウンドが終了するまで進行するターンベースのゲームを作成しようとしています。しかし、13ラウンド後にしか壊れない無限のwhileループを作成した後は、シーンはロードされませんでした。シーンが表示される前にdidMoveToViewのコードが実行されるのはなぜですか?これを修正する方法はありますか、私はおそらく何か間違っていますか?whileループをdidMoveToViewに追加する

override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 
    view.ignoresSiblingOrder = true 
    roundFirstCard = Card(key: "2c") 
    var actions = [SKAction]() 
    let cards = makeDeck() 
    for c in cards { 
     let card = Card(key: c) 
     card.name = card.key 
     card.position = CGPointMake(500, 400) 
     addChild(card) 
     giveCardToCorrectPlayer(cards.indexOf(c)!, c: card) 
     actions.append(SKAction.runAction(SKAction.moveTo(getTargetLocationForCard(cards.indexOf(c)!), duration: 1.0), onChildWithName: card.name!)) 
     actions.append(SKAction.waitForDuration(0.05)) 
    } 
    actions.append(SKAction.waitForDuration(1.0)) 
    playerCardSets = [player1Cards, player2Cards, player3Cards, player4Cards] 
    self.runAction(SKAction.sequence(actions), completion: {self.spreadCards()}) 
    currentPlayer = 1 
    while true {} 
} 
+0

あなたはどのようなコードを書かれていますか? – gurmandeep

+0

SKNodeのグループを反復処理してアクションを実行することはできず、その結果をdidMoveToViewに表示することを期待します。この関数が呼び出され、完了したらdidMoveToViewが終了したときにそのままシーンを描画し、その後SKゲームループを開始します。 –

+0

トランジションを行っていて、didMoveToViewがすぐに起動した場合、新しいシーンが唯一のシーンであるかどうかを判断するために古いシーンのdidMoveFromViewを確認する必要があります – Knight0fDragon

答えて

0

特にシーンがラウンドの場合は、whileループは必要ありません。 あなたがあなたの質問に書いたこのシーンは、あなたのゲームの典型的なラウンドだと思います。 あなたはAppDelegateで、たとえばNSUserDefaultsでのラウンド番号を保存することができます:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    NSUserDefaults.standardUserDefaults().setInteger(0, forKey: "roundCounter") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    return true 
} 

をだからあなたのシーンで、あなたのラウンドが何であるかを知っている:

override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 
    var roundCounter = NSUserDefaults.standardUserDefaults().integerForKey("roundCounter") 
    roundCounter += 1 //Start new round 
    guard let r = roundCounter where r > 13 { 
     gameOver() //launch gameOver function 
     return 
    } 
    // do your stuff 
    // save the actual round number 
    NSUserDefaults.standardUserDefaults().setInteger(roundCounter, forKey: "roundCounter") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

func gameOver() { 
    // reset to zero your round counter 
    NSUserDefaults.standardUserDefaults().setInteger(0, forKey: "roundCounter") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    //do your stuff 
} 
+0

すべての13ラウンドのシーンが1つしかないので、私は答えで少し混乱しています –

+0

あなたのコードでは、ゲームが終わったとき、あまりにも少ないコードを理解していない、もっとコードを投稿してみてください助けてください、PSは真の{}の間に削除します、それは正しくありません、そしてあなたがwhileループで達成したいことをより良く説明してください –

関連する問題