Hallo zusammen,
ich habe eine Aufgabe zu lösen und bräuchte mal eure Hilfe beim Verständnis einer Schleife.
Ich habe ein kleines Programm für einen Invader. Es gibt viele kleine und einen Endgegner. Die Aliens und der Endgegner laufen von links nach rechts und zurück, die kleinen Aliens gehen nach dem erreichen des Randes eins nach unten, das soll der Endgegner nicht tun. Der Endgegner soll zudem noch schneller sich bewegen und feuern. soweit so gut. Ich habe die func update verwendet und beide reingepackt, nur bleibt mein Endgegner so lange am Rand stehen bis die kleinen Aliens da sind und wechselt erst dann die Richtung. Ich habe schon einiges ausprobiert, auch schon eine eigene func für den Endgegner, aber er bleibt immer am Rand stehen. Ich verstehe nicht so richtig warum.
Könntet ihr mich eventuell aufschlauen
Alles anzeigen
ich habe eine Aufgabe zu lösen und bräuchte mal eure Hilfe beim Verständnis einer Schleife.
Ich habe ein kleines Programm für einen Invader. Es gibt viele kleine und einen Endgegner. Die Aliens und der Endgegner laufen von links nach rechts und zurück, die kleinen Aliens gehen nach dem erreichen des Randes eins nach unten, das soll der Endgegner nicht tun. Der Endgegner soll zudem noch schneller sich bewegen und feuern. soweit so gut. Ich habe die func update verwendet und beide reingepackt, nur bleibt mein Endgegner so lange am Rand stehen bis die kleinen Aliens da sind und wechselt erst dann die Richtung. Ich habe schon einiges ausprobiert, auch schon eine eigene func für den Endgegner, aber er bleibt immer am Rand stehen. Ich verstehe nicht so richtig warum.
Könntet ihr mich eventuell aufschlauen
Quellcode
- override func update(_ currentTime: TimeInterval) {
- //die Zeit seit dem letzten Aufruf berechnen
- //letzter Aufruf ist eine Eigenschaft vom Typ TimeIntervall
- let delta: TimeInterval = currentTime - letzterAufruf
- //für den Richtungswechsel
- var richtungsWechsel = false
- //zwischenZeit ist eine Eigenschaft vom Typ TimeIntervall die Zeiten zusammenrechnen
- zwischenZeit = zwischenZeit + delta
- //haben wir eine Sekunde erreicht?
- if zwischenZeit >= 1.0 {
- // Einsendeaufgabe *2*
- // Der Endgegner bewegt sich von recht nach links und wieder zurück
- enumerateChildNodes(withName: "endgegner") {
- knoten, stop in
- if let endgegner = knoten as? Endgegner {
- richtungsWechsel = endgegner.bewegen(rechtsLinks: self.rechtsLinks)
- if richtungsWechsel == true {
- //Einsendeaufgabe *1*
- //Erhöhung der Geschwindigkeit nach dem Wechsel der Richtung
- self.derEndgegner.geschwindigkeit = self.derEndgegner.geschwindigkeit + 5
- print("Geschwindigkeit erhöht")
- stop.pointee = true
- }
- self.derEndgegner.feuern()
- }
- }
- enumerateChildNodes(withName: "alien") {
- knoten, stop in
- //zur Sicherheit prüfen, ob eine Umwandlung möglich ist
- if let meinAlien = knoten as? Alien {
- richtungsWechsel = meinAlien.bewegen(rechtsLinks: self.rechtsLinks, nachUnten: 0)
- //muss gewechselt werden?
- if richtungsWechsel == true {
- //dann geht es nach unten
- self.nachUnten = 1
- print("nach unten + 1")
- // die Schleife beenden
- stop.pointee = true
- }
- meinAlien.feuern()
- }
- }
- if self.nachUnten == 1 {
- //alle bewegen sich eine Positon nach unten
- enumerateChildNodes(withName: "alien") {
- knoten, stop in
- if let meinAlien = knoten as? Alien {
- richtungsWechsel = meinAlien.bewegen(rechtsLinks: 0, nachUnten: 1)
- print("richtungsWechsel")
- //Einsendeaufgabe *1*
- //Erhöhung der Geschwindigkeit nach dem Wechsel der Richtung
- meinAlien.geschwindigkeit = meinAlien.geschwindigkeit + 3
- print("geschindigkeit Alien")
- }
- }
- //es geht nicht mehr nach unten
- self.nachUnten = 0
- //die Richtung wird umgedreht
- self.rechtsLinks = self.rechtsLinks * -1
- print("rechtslink * -1")
- }
- //die Zeit zurücksetzen
- self.zwischenZeit = 0
- }
- //die neue Zeit zwischenspeichern
- letzterAufruf = currentTime
- }
- //func bewegen für den Endgegner mit Prüfung auf den Rand
- func bewegen(rechtsLinks: Int) -> Bool {
- var kontakt = false
- position = CGPoint(x: position.x + CGFloat(rechtsLinks * geschwindigkeit), y: 650)
- print("\(CGPoint(x: position.x, y: position.y))")
- //gab es einen Kontakt mit dem Rand?
- if position.x < 50 || position.x >= szene.frame.maxX - 50 {
- kontakt = true
- print("prüfung erfolgreich")
- //das Sprite neu positionieren
- if position.x <= 50 {
- position.x = 51
- print("neue Position")
- }
- else {
- position.x = szene.frame.maxX - 51
- }
- }
- return kontakt
- }