Seite 1 von 1

Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 12:39
von Daniel Schreiber
Hallo, ich arbeite an einem kleinen Programm, bei welchem man ein Muster gezeigt bekommt und dieses nachzeichnen soll. Ich komme gut voran und das Prinzip funktioniert. Als ich gerade dabei war, meinen Code zu überarbeiten, weil er zu unübersichtlich geworden ist, ist es plötzlich passiert, dass das Programm abstürtzt, sobald ich die Game Klasse aufrufe, im Startscreen funktioniert noch alles einwandfrei. Das komische ist allerdings, dass keine Fehlermeldung angezeigt wird, sondern Pygame keine Rückmeldung mehr gibt. Ich konnte den Fehlerbereich schon auf die Gameloop Funktion einschränken, aber mehr auch nicht. Ihr bracuth jetzt nicht den ganzen Code verstehen, sondern nur herausfinden, warum pygame abstürzt. Kann mir jemand helfen? Das ausführbare bzw nicht ausführbare Programm findet ihr unter https://www.file-upload.net/gal-259073/ogeyns/1.html. Vielen lieben Dank für jegliche Hilfe!

Code: Alles auswählen

def gameloop(self):
        while self.playing:
            self.input()
            self.update()
            self.draw()

    def input(self):
        if pygame.mouse.get_pressed()[0]:
            self.mouseDown = True
            for dot in self.all_dots:
                if not dot.connected and pygame.sprite.collide_circle(self.mouse, dot):
                    if self.startDot is None:
                        self.startDot = dot
                        self.currentDot = dot
                    else:
                        self.lines_list.append((self.currentDot.rect.center, dot.rect.center))
                        dot.connected = True
                        self.currentDot = dot

        else:
            if self.mouseDown:
                self.check()

        if pygame.mouse.get_pressed()[1]:
            self.playing = False
            pygame.quit()

    def update(self):
        self.mouse.update_sprite()
        self.all_dots.update()

    def draw(self):
        screen.fill(lightBlue)
        self.all_dots.draw(screen)
        if self.mouseDown and self.startDot is not None:
            pygame.draw.line(screen, white, self.currentDot.rect.center, self.mouse.rect.center, 10)

        for line in self.lines_list:
            pygame.draw.line(screen, white, line[0], line[1], 10)

        self.all_sprites.draw(screen)
        pygame.display.flip()

    def check(self):
        if self.currentDot is self.startDot:
            if self.startDot is not None:
                self.startDot.connected = False
                self.startDot = None
        elif self.pattern.lines_list == self.lines_list:
            self.playing = False
        else:
            pygame.quit()

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 13:42
von __blackjack__
@Daniel Schreiber: Ich würde von der klassischen Variante mit einer ereignisverarbeitenden Schleife nicht abweichen. Die fehlt Dir hier und darum werden keine Ereignisse mehr vom darunterliegenden System erfasst. Du musst also mindestens regelmässig dafür sorgen, dass das passiert. Ausserdem besteht bei Deinem Ansatz die Gefahr das Du Änderungen bei den Mausbuttons verpasst, weil das ja bei Dir wirklich immer nur eine Momentaufnahme des aktuellen Zustands ist, während bei einer Schleife die alle Ereignisse verarbeitet wirklich jede Zustandsänderung erfasst wird, auch wenn mehrere davon zwischen den Abfragen liegen.

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 14:13
von Daniel Schreiber
Ja darüber habe ich nachgedacht, aber mich dafür entschieden, weil das Programm so aufgebaut ist, dass der Spieler praktisch die ganze Zeit am Stück die Maus gedrückt hält, weshalb es nicht dazu kommen kann, das kurze ereignisse nicht erfasst werden. Hasst du einen Verdacht, warum das Programm abstürzt?

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 14:18
von __deets__
Was heisst denn "abstuerzt"? Hast du einen Stacktrace?

Und die Bemerkungen von Blackjack greifen trotzdem. Du verstehst offensichtlich nicht, was da wirklich passiert, und dadurch, dass du die Ereignischleifen nicht laufen laesst, kann es zu Problemen kommen. pygame und das darunter liegende OS gehen davon aus, dass das passiert. Wenn du das nicht beruecksichtigst, dann kann es zB passieren, dass unter Windows dein Programm als nicht-antwortend markiert wird, und der Benutzer eine Fehlermeldung bekommt.

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 14:47
von Daniel Schreiber
Hallo, ich habe jetzt mit der klassischen event schleife gearbeitet und es funktioniert wieder. Was ich mich frage, ist warum es auf die andere Weise trotzdem lange zeit funktioniert hat und ob die Queue regelmäßig geleert werden muss?

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 14:53
von __deets__
Das die Queue regelmaessig geleert werden muss haben dir jetzt zwei Leute erzaehlt. Und du hast es gemacht, und es laeuft besser. Was koennte dann wohl die Antwort auf die Frage "muss die Queue regelmaessig geleert werden?" sein?

Warum das lange funktioniert hat und jetzt nicht kann dir hier keiner sagen. Wir waren nicht dabei ;)

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 15:13
von Daniel Schreiber
Vielen Dank

Re: Programm stürzt ab (Pygame)

Verfasst: Freitag 11. Januar 2019, 16:19
von Daniel Schreiber
Hast du ansonsten Tipps, wie ich meinen Code effizienter gestalten kann?