2016-07-15 10 views
0

xcodeを使いこなして、ゲームのボトムに小さなブロックのように見えるタイルがあります。 Game Project Filesに付属の更新機能で、すべてのブロックを左に移動させました。しかし、いったんタイルの1つが画面から消えたら、それを他の側に移してそれを続けるようにしますが、静的になり、ここに移動するのは私のコードです。Sprite-Kitスプライトが私のifステートメントで右に動かない

override func update(currentTime: CFTimeInterval) { 


    tileStone1.position = CGPoint(x: tileStone1.position.x - 4, y: tileStone1.position.y) 
    tileStone2.position = CGPoint(x: tileStone2.position.x - 4, y: tileStone2.position.y) 
    tileStone3.position = CGPoint(x: tileStone3.position.x - 4, y: tileStone3.position.y) 
    tileStone4.position = CGPoint(x: tileStone4.position.x - 4, y: tileStone4.position.y) 
    tileStone5.position = CGPoint(x: tileStone5.position.x - 4, y: tileStone5.position.y) 
    tileStone6.position = CGPoint(x: tileStone6.position.x - 4, y: tileStone6.position.y) 
    tileStone7.position = CGPoint(x: tileStone7.position.x - 4, y: tileStone7.position.y) 
    tileStone8.position = CGPoint(x: tileStone8.position.x - 4, y: tileStone8.position.y) 
    tileStone9.position = CGPoint(x: tileStone9.position.x - 4, y: tileStone9.position.y) 
    tileStone10.position = CGPoint(x: tileStone10.position.x - 4, y: tileStone10.position.y) 
    tileStone11.position = CGPoint(x: tileStone11.position.x - 4, y: tileStone11.position.y) 
    tileStone12.position = CGPoint(x: tileStone12.position.x - 4, y: tileStone12.position.y) 



    if (tileStone1.position.x < self.frame.size.width){ 

     tileStone1.anchorPoint = CGPointZero 

     tileStone1.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 




    } 
+1

:よりもはるかに短いと簡単です

tileStone.position.x -= 4 //or later tileStone.position.x = 926 

を「930-4」へ。それが画面上にあると仮定すると、次のフレームは '930-4'に移動します...実際には、すべてのブロックを配列に入れて、12個のクラス変数を持つ代わりにループしてください... – Putz1103

+1

(tileStone1.position。 x Shuri2060

+0

また、この行のポイントは何ですか: 'tileStone1.anchorPoint = CGPointZero'? – Shuri2060

答えて

2

Putz1103が示唆したように、実際には配列を使用する必要があります。その後、私がコメントで質問したように、おそらくself.frame.size.widthの代わりにself.frame.minXを使用しようとしていますか? (また、self.frame.size.widthの代わりにself.frame.widthを使用することができます)

位置が常に幅よりも小さいため、移動しない理由はフレームごとに位置がリセットされていることを意味します。

絶対的に明確にする:.minXは通常0

override func update(currentTime: CFTimeInterval) { 

    tileStone1.position = CGPoint(x: tileStone1.position.x - 4, y: tileStone1.position.y) 
    tileStone2.position = CGPoint(x: tileStone2.position.x - 4, y: tileStone2.position.y) 
    tileStone3.position = CGPoint(x: tileStone3.position.x - 4, y: tileStone3.position.y) 
    tileStone4.position = CGPoint(x: tileStone4.position.x - 4, y: tileStone4.position.y) 
    tileStone5.position = CGPoint(x: tileStone5.position.x - 4, y: tileStone5.position.y) 
    tileStone6.position = CGPoint(x: tileStone6.position.x - 4, y: tileStone6.position.y) 
    tileStone7.position = CGPoint(x: tileStone7.position.x - 4, y: tileStone7.position.y) 
    tileStone8.position = CGPoint(x: tileStone8.position.x - 4, y: tileStone8.position.y) 
    tileStone9.position = CGPoint(x: tileStone9.position.x - 4, y: tileStone9.position.y) 
    tileStone10.position = CGPoint(x: tileStone10.position.x - 4, y: tileStone10.position.y) 
    tileStone11.position = CGPoint(x: tileStone11.position.x - 4, y: tileStone11.position.y) 
    tileStone12.position = CGPoint(x: tileStone12.position.x - 4, y: tileStone12.position.y) 



    if (tileStone1.position.x < self.frame.minX){ 

     tileStone1.anchorPoint = CGPointZero 

     tileStone1.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 
    } 
} 

アレイバージョン(あなたが初期化する必要がある画面の一番左の位置を取得しながら.widthは、1024年を言う、あなたのスクリーンの幅を取得しますまた

override func update(currentTime: CFTimeInterval) { 

    for tileStone in tileStonesArray { 

     tileStone.position = CGPoint(x: tileStone.position.x - 4, y: tileStone.position.y) 




     if (tileStone.position.x < self.frame.minX){ 

      tileStone.anchorPoint = CGPointZero 

      tileStone.position = CGPoint(x: 930 - 4, y: tileStone.position.y) 
     } 
    } 
} 

(althoug:それはあなたが配列を持っているtileStonesのしかし、多くの数)を動作するため、配列ではなく、このバージョンでは優れていますおそらく直接tileStone.position.xを変更することは可能でしょうか?私はそれがスウィフトで動作すると思うが、あなた自身で見なければならないでしょうか?言い換えれば

、あなたの代わりにこのラインを使用することができます。コードはtile1が画面に表示されていると、それを移動することを私に言っていること

tileStone.position = CGPoint(x: tileStone.position.x - 4, y: tileStone.position.y) 

//or later 

tileStone.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 
+0

私はあなたの答えに同意します。そして、anchorPointは意味をなさないので、私のために、それは削除することができます。 –

関連する問題