Ich versuche mich grade an einem kleinen Spiel, bei dem Spielsteine mit Zeitablauf bewegt werden oder durch den Spieler selbst bewegt werden können. Mit einem Stein läuft alles gut, wenn ich aber alles in eine while-Schleife packe, damit fortlaufend Steine kommen, funktioniert die Bewegung der Steine nicht mehr, dass heißt sie werden nicht mehr angezeigt. Er läuft sich in der while-Schleife irgendwie fest und ich habe keine Idee, wo ich ansetzen muss. Hat jemand ein Stichwort oder einen Tipp für mich?
Alles anzeigen
Quellcode
- func spielstarten() {
- while spiellaufenlassen {
- if (neuerSteinKannLos==true) {
- neuerSteinKannLos = false
- neuenSteinsetzen()
- spiellaeuft()
- } // if Ende
- }
- } // ENDE
- func spiellaeuft() {
- spielQueue.async(qos: .userInitiated) { // Hintergrund
- for _ in self.startPunktY...self.startPunktY+self.spielfeldhoehe {
- usleep(self.spielgeschwindigkeit)
- for item in self.aktuellerSpielstein {
- // Kontrolle ob unterer Spielfeldrand erreicht ist
- let neuePosY = item.yPosition + self.spielsteinbreite
- if neuePosY > self.spielfeldendeY {
- self.aktuellerSpielstein.removeAll()
- self.neuerSteinKannLos = true
- return
- }
- // Stein an alter Position löschen
- DispatchQueue.main.async {
- item.bild.removeFromSuperview()
- }
- // neue Position ermitteln
- item.yPosition = item.yPosition + 1
- // Stein neu zeichnen
- DispatchQueue.main.async {
- self.view.addSubview(item.anzeigen())
- }
- } // For Ende
- } // For Ende
- } // Hintergrund Ende
- } // ENDE