2016-07-15 25 views
0

In xcode herumspielen und ich habe Kacheln im unteren Teil meines Spiels, die wie kleine Blöcke aussehen. Ich habe alle Blöcke in der Update-Funktion, die mit den Spiel-Projektdateien geliefert wird, nach links verschoben. Aber sobald eine der Kacheln vom Bildschirm verschwindet, stelle ich sie auf die andere Seite, um zu versuchen, sie weiterlaufen zu lassen, aber sie wird statisch und bewegt sich hier nicht, ist mein Code.Sprite-Kit Sprites, der sich in meiner if-Anweisung nicht nach rechts bewegt

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

Dieser Code sagt mir, dass, sobald tile1 auf dem Bildschirm ist, es bewegen zu '930-4'. Angenommen, das ist auf dem Bildschirm, dann wird das nächste Bild nach '930-4 'verschoben ... Sie sollten wirklich alle diese Blöcke in ein Array einfügen und sie überlappen, anstatt 12 Klassenvariablen zu haben ... – Putz1103

+1

(tileStone1.position. x Shuri2060

+0

Auch, was ist der Sinn dieser Zeile: 'tileStone1.anchorPoint = CGPointZero'? – Shuri2060

Antwort

2

Wie Putz1103 vorgeschlagen, sollten Sie stattdessen ein Array verwenden. Dann, wie ich in den Kommentaren gefragt habe, möchten Sie vielleicht self.frame.minX anstelle von self.frame.size.width verwenden? (Auch in Zukunft können Sie einfach self.frame.width anstelle von self.frame.size.width verwenden)

Der Grund, warum es nicht bewegt, ist, weil die Position immer kleiner als die Breite ist, was natürlich bedeutet, dass die Position jedes Bild zurückgesetzt wird.

Um ganz klar: .width die Breite des Bildschirms wird, sagen 1024, während .minX die am weitesten links stehende Position des Bildschirms, die in der Regel Version 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) 
    } 
} 

Array ist bekommt (Sie haben zu initialisieren . ein Array statt Diese Version ist besser, weil es jedoch viel Anzahl von tileStones arbeitet man im Array):

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) 
     } 
    } 
} 

Zusätzlich (althoug h Ich bin nicht ganz sicher, ob es möglich ist, da einige Eigenschaften schreibgeschützt sind - du musst es selbst sehen, obwohl ich denke, dass es in Swift funktioniert), vielleicht ist es möglich, tileStone.position.x direkt zu ändern?

Mit anderen Worten, können Sie diese Zeile verwenden Sie stattdessen:

tileStone.position.x -= 4 

//or later 

tileStone.position.x = 926 

, die viel kürzer und einfacher ist als:

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

Ich stimme Ihrer Antwort zu. Und der Ankerpunkt macht keinen Sinn, für mich kann er gelöscht werden. –