2017-06-08 13 views
1

配列内の色に基づいて、menusceneのノードのfillcolorを変更しようとしています。Swift Spritekitは、複数回タップしたときのノードの色を変更します。

私は4色で塗りつぶした配列を持っています。ノードを押すと、その位置に基づいて色をフィルタリングする必要があります。私は再びそれが緑に変わり、それをタップすると、それは、赤に色を変更する必要があります一度私はノードをタップするので、別のタップが、これは一つだけを読み、しかし青

var colors = [UIColor.blue, UIColor.red, UIColor.green, UIColor.purple] 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch = touches.first! 
    var index = 0 
    if changeColor.contains(touch.location(in: self)) { 
     index += 1 
     changeColor.fillColor = colors[index] 
     if index == 3 { 
      index = 0 
     } 
    } 
} 

に戻った後、紫色に変更し、そしてだろうタップする必要があります。複数のタップを登録する必要があります。

+1

私は、そのタップを読んだと思いますが、あなたは0に、この機能は非常にあなただけの配列の最初の色を見ることができます実行するたびにインデックスをリセットしています。関数の外でvar index = 0を移動すると、 – Steve

+0

も色を変更した後にインデックス+ = 1を移動するか、色の色が表示されません。 – Steve

+0

touchesBegan()を入力するたびにインデックスがリセットされます。それをスコープの外に移動して、その間の呼び出しを持続させるようにします。 – Fluidity

答えて

2

touchesの外側のインデックスの初期化を開始し、色を変更した後にインデックスをインクリメントします。

var colors = [UIColor.blue, UIColor.red, UIColor.green, UIColor.purple] 
var index = 0 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch = touches.first! 

    if changeColor.contains(touch.location(in: self)) { 
     changeColor.fillColor = colors[index] 
     index += 1 

     if index == colors.count { 
      index = 0 
     } 
    } 
} 
+0

また、 'index'の名前を' currentNodeColor'などに変更してください。 –

+0

@SteveIves私は変数がはるかにわかりやすい名前であることに同意しますが、コードは機能する必要はありませんが、読みやすくなります – Steve

関連する問題