TimeInterval für unterschiedliche Nodes

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • TimeInterval für unterschiedliche Nodes

    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 ?(

    Quellcode

    1. override func update(_ currentTime: TimeInterval) {
    2. //die Zeit seit dem letzten Aufruf berechnen
    3. //letzter Aufruf ist eine Eigenschaft vom Typ TimeIntervall
    4. let delta: TimeInterval = currentTime - letzterAufruf
    5. //für den Richtungswechsel
    6. var richtungsWechsel = false
    7. //zwischenZeit ist eine Eigenschaft vom Typ TimeIntervall die Zeiten zusammenrechnen
    8. zwischenZeit = zwischenZeit + delta
    9. //haben wir eine Sekunde erreicht?
    10. if zwischenZeit >= 1.0 {
    11. // Einsendeaufgabe *2*
    12. // Der Endgegner bewegt sich von recht nach links und wieder zurück
    13. enumerateChildNodes(withName: "endgegner") {
    14. knoten, stop in
    15. if let endgegner = knoten as? Endgegner {
    16. richtungsWechsel = endgegner.bewegen(rechtsLinks: self.rechtsLinks)
    17. if richtungsWechsel == true {
    18. //Einsendeaufgabe *1*
    19. //Erhöhung der Geschwindigkeit nach dem Wechsel der Richtung
    20. self.derEndgegner.geschwindigkeit = self.derEndgegner.geschwindigkeit + 5
    21. print("Geschwindigkeit erhöht")
    22. stop.pointee = true
    23. }
    24. self.derEndgegner.feuern()
    25. }
    26. }
    27. enumerateChildNodes(withName: "alien") {
    28. knoten, stop in
    29. //zur Sicherheit prüfen, ob eine Umwandlung möglich ist
    30. if let meinAlien = knoten as? Alien {
    31. richtungsWechsel = meinAlien.bewegen(rechtsLinks: self.rechtsLinks, nachUnten: 0)
    32. //muss gewechselt werden?
    33. if richtungsWechsel == true {
    34. //dann geht es nach unten
    35. self.nachUnten = 1
    36. print("nach unten + 1")
    37. // die Schleife beenden
    38. stop.pointee = true
    39. }
    40. meinAlien.feuern()
    41. }
    42. }
    43. if self.nachUnten == 1 {
    44. //alle bewegen sich eine Positon nach unten
    45. enumerateChildNodes(withName: "alien") {
    46. knoten, stop in
    47. if let meinAlien = knoten as? Alien {
    48. richtungsWechsel = meinAlien.bewegen(rechtsLinks: 0, nachUnten: 1)
    49. print("richtungsWechsel")
    50. //Einsendeaufgabe *1*
    51. //Erhöhung der Geschwindigkeit nach dem Wechsel der Richtung
    52. meinAlien.geschwindigkeit = meinAlien.geschwindigkeit + 3
    53. print("geschindigkeit Alien")
    54. }
    55. }
    56. //es geht nicht mehr nach unten
    57. self.nachUnten = 0
    58. //die Richtung wird umgedreht
    59. self.rechtsLinks = self.rechtsLinks * -1
    60. print("rechtslink * -1")
    61. }
    62. //die Zeit zurücksetzen
    63. self.zwischenZeit = 0
    64. }
    65. //die neue Zeit zwischenspeichern
    66. letzterAufruf = currentTime
    67. }
    68. //func bewegen für den Endgegner mit Prüfung auf den Rand
    69. func bewegen(rechtsLinks: Int) -> Bool {
    70. var kontakt = false
    71. position = CGPoint(x: position.x + CGFloat(rechtsLinks * geschwindigkeit), y: 650)
    72. print("\(CGPoint(x: position.x, y: position.y))")
    73. //gab es einen Kontakt mit dem Rand?
    74. if position.x < 50 || position.x >= szene.frame.maxX - 50 {
    75. kontakt = true
    76. print("prüfung erfolgreich")
    77. //das Sprite neu positionieren
    78. if position.x <= 50 {
    79. position.x = 51
    80. print("neue Position")
    81. }
    82. else {
    83. position.x = szene.frame.maxX - 51
    84. }
    85. }
    86. return kontakt
    87. }
    Alles anzeigen
  • Du verwendest nur 1 rechtsLinks Merker für den Endgegner und die Aliens. Daher werden sich beide nur in die selbe Richtung bewegen. ;)

    Wenn dies nicht gewünscht ist, dann musst Du für den Endgegner und die Aliens einen eigenen rechtsLinks Merker verwenden.

    Weiterhin wechselst Du den rechtsLinks Merker nur bei den Aliens.
  • Hallo Nussratte,

    danke für den Hinweis, leider bin ich noch nicht so weit um das Debugging so richtig zu verstehen. Das mit dem Quietscheentchen finde ich spannend und für mich selbst mache ich das auch so. Nur in diesem Beispiel habe ich es nicht verstanden, warum es so läuft wie es läuft.

    Aber es wird ja von Tag zu Tag besser :)