Pygame Klasse so schließen, dass main loop weiterläuft

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
zerokrezan
User
Beiträge: 8
Registriert: Sonntag 16. Juni 2019, 19:21

Code: Alles auswählen

import pygame
import sys


size = (500,500)
FPS = 5




class Game1(pygame.sprite.Sprite):
    def __init__(self, screen, size):
        self.screen = screen
        self.screen.set_mode(size)
        super(Game1, self).__init__()
        self.images = []
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (1).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (2).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (3).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (4).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (5).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (6).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (7).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (8).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (9).png'))
        self.images.append(pygame.image.load('/home/rezan/Desktop/python/python/games/heropygame/spiritimg2/Dead (10).png'))
        self.index = 0
        self.rect = pygame.Rect(5, 5, 150, 198)




 
    def update(self):
        if self.index >= len(self.images):
            self.index = 0
        self.image = self.images[self.index]
        self.index += 1
        
            
            
Ich habe zwei files erstellt mit jeweils einer Klasse und dann zusätzlich noch meine main loop.
Ich habe beide Classen dort aufgerufen und es klapp einwandfrei.
Nun möchte ich aber, dass die Klasse bem zweimaligem Ankommen im letzen Bild (self.images(10) aufhört in der main loop zu laufen und stattdessen die andere Klasse weiterläuft.
Bis jetzt war es so, dass ich das Fenster jeweils schließen musste und die andere Klasse anlief, aber nun möchte ich dass es automatisch ohne Reaktion läuft.
Danke im Voraus :)
Hier nochmal der file von meiner main loop:

Code: Alles auswählen

import spirit_class
from spirit_class import Game
import spirit1_class
from spirit1_class import Game1
import pygame
import spirit2_class
from spirit2_class import Game2

size = (1000,500)
FPS = 5

def main():
    global size,FPS
    pygame.init()
    game = Game(pygame.display, (size))
    my_group = pygame.sprite.Group(game)
    game.schleife(my_group, pygame.display.set_mode(size),pygame.time.Clock(),FPS)
    #clock = pygame.time.Clock()
    game1 = Game1(pygame.display, (size))
    my_group = pygame.sprite.Group(game1)
    game1.schleife(my_group, pygame.display.set_mode(size),pygame.time.Clock(),FPS)
    
    


if __name__ == '__main__':
    	main()

Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@zerokrezan: Klassen ”laufen” nicht. Ein Modul pro Klasse solltest Du Dir auch gar nicht erst angewöhnen. Und noch weniger Namen zu nummerieren. Und da dann auch noch Modul- und Klassennamen. Der Präfix `my_` ist auch unsinnig. Oder gibt es auch eine `our_group` und/oder eine `their_group`?

Die ganzen Zeilen für das befüllen von `self.images` schreibt man so auch nicht. Wenn man es denn wirklich alles manuell hinschreiben würde, dann nicht mit `append()` sondern direkt in dem man eine Liste da hinschreibt. Aber natürlich schreibt man da nicht 10 Zeilen die sich nur durch eine laufende Zahl im Dateinamen unterscheiden, sondern verwendet eine Schleife.

`super()` braucht keine Argumente.

Die `update()`-Methode lässt sich mit dem Modulo-Operator einfacher schreiben.

Das `pygame.display`-Modul als Argument zu übergeben und dieses dann lokal `screen` zu nennen ist komplett verwirrend. Und dann erstellst Du etwas was tatsächlich den Namen `screen` verdient hätte und merkst Dir das nirgendwo um da dann auch mal was drauf anzeigen zu können. Der Code den Du da zeigst ist so nicht sinnvoll lauffähig.

Vergiss, dass es ``global`` gibt. Weg damit. Das hat in einem sauberen Programm nichts zu suchen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten