1

スコア値が特定の数値(10、20など)に達するたびに、現在のスコアを表す SKLabelNode を持っています。これは、拡大および縮小シーケンスでアニメーション化しようとしています。問題は、アニメーション自体に何らかの遅延があり、設定した期間よりもはるかに時間がかかることです。基本的には成長し、それから待機し、しばらくすると最終的に縮小します。

これが私のコードです:

override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        ...
        //skactions setting
        growAction = SKAction.scaleBy(1.2, duration: 0.4)
        shrinkAction = SKAction.scaleBy(0.8333, duration: 0.4)
        growAndShrink = SKAction.sequence([growAction, shrinkAction])
        ...
}


override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */

        if (score % 10) == 0 && score != 0 && gameState == GameState.Play {
            scoreLabel.runAction(growAndShrink)
        }       
}

update func はそのために使用するのに適したものですが、そうですか?

4

2 に答える 2

1

オン スコアを作成してdidSet property observer、スコア ラベルを動的に更新し、アニメーションを実行できます。

var score : Int = 0 {
    didSet
    {
        scoreLabel.text = "Score : \(score)"

        if (score % 10 == 0 && score != 0 && gameState == GameState.Play)
        {
            animateScore()
        }
    }
}

func animateScore()
{
    scoreLabel.removeAllActions()
    scoreLabel.text = "Score : \(score)"
    let growAction = SKAction.scaleBy(1.2, duration: 0.4)
    let shrinkAction = SKAction.scaleBy(0.8333, duration: 0.4)
    let growAndShrink = SKAction.sequence([growAction, shrinkAction])
    scoreLabel.runAction(SKAction.repeatAction(growAndShrink, count: 2))
}
于 2015-01-22T11:49:53.353 に答える
1

ここで引数を使用してcompletion:、アクションを再実行する必要があるかどうかをチェックする関数を呼び出すことができます。

scoreLabel.runAction(growAndShrink, completion: { self.runAgain() })

runAgain次に、アクションをチェックして再実行するためのロジックが含まれます。基本的に、両方を組み合わせることができます:

func runGrowAndShrinkAction()
{
    if (conditions)
    {
        scoreLabel.runAction(growAndShrink, completion: { self.runGrowAndShrinkAction() })
    }
}

補足:runBlockシーケンスで使用する場合は、非同期で呼び出されることを考慮してください。つまり、 の実行は終了completion:を待ちませんrunBlock

更新:別のオプションを使用することです。メソッドSKAction.repeatActionForever()の条件がupdate変更された場合は、でアクションを削除できますremoveActionForKey()

于 2015-01-22T09:08:33.413 に答える