PyGame - Frage zu einer Aufgabe

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
snkrhead
User
Beiträge: 2
Registriert: Mittwoch 24. Februar 2021, 19:09

Guten Abend zusammen,

ich hätte eine Frage zu PyGame, in der Aufgabe geht es darum eine Bild von links nach rechts laufen zu lassen. Nachdem das Bild rechts herausgefahren ist, soll es wieder von draußen (links) wieder rechts reinkommen.

Bei mir fährt das Bild leider nur rechts heraus und kommt nicht wieder von links herein. Eventuell hat ja jemand eine Idee woran es liegen könnte, vermutlich hab ich nur irgendwo einen Denkfehler und komme nicht selbst darauf.

Vielen Dank schon mal!

Code: Alles auswählen

import pygame
pygame.init()

WEISS   =   (255,255,255)
WIDTH,HEIGHT   =   640,480

screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Logo")
image = pygame.image.load("/Users/Karl/Documents/Atom/PyG/logo.png")

#Variablen
bildgroesse = image.get_rect()
xpos=0
ypos=0
herausgefahren = False

while True:
    pygame.display.update()
    screen.fill(WEISS)
    screen.blit(image,(xpos,ypos))

    #Wenn xpos kleiner Breite des Fensters, wandere nach rechts bis xpos=Ende des Fensters
    if xpos<WIDTH:
        xpos += 1
    if xpos==WIDTH:
        #setze dann den Boolean auf True
        herausgefahren=True

    if herausgefahren:
        xpos= bildgroesse.width*(-1)
        screen.blit(image,(xpos,ypos))
        while xpos < 0:
            xpos +=1
        if xpos==0:
            for xpos in range(WIDTH):
                xpos+=1


    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            quit()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du Dir bei diesem Code gedacht:

Code: Alles auswählen

        xpos= bildgroesse.width*(-1)
        screen.blit(image,(xpos,ypos))
        while xpos < 0:
            xpos +=1
        if xpos==0:
            for xpos in range(WIDTH):
                xpos+=1
Erst setzt Du xpos auf -bildgroesse.width.
Dann setzt Du xpos auf ziemlich komplizierte Weise auf 0
Dann prüfst Du ob xpos auch wirklich 0 ist, um es dann wieder auf komplizierte Weise auf WIDTH zu setzen.
Das würde viel einfacher gehen:

Code: Alles auswählen

xpos = WIDTH
Was aber an dieser Stelle im Code auch schon gegeben ist, so dass man den ganzen Block weglassen könnte.
snkrhead
User
Beiträge: 2
Registriert: Mittwoch 24. Februar 2021, 19:09

Sirius3 hat geschrieben: Mittwoch 24. Februar 2021, 20:52 Was hast Du Dir bei diesem Code gedacht:

Code: Alles auswählen

        xpos= bildgroesse.width*(-1)
        screen.blit(image,(xpos,ypos))
        while xpos < 0:
            xpos +=1
        if xpos==0:
            for xpos in range(WIDTH):
                xpos+=1
Erst setzt Du xpos auf -bildgroesse.width.
Dann setzt Du xpos auf ziemlich komplizierte Weise auf 0
Dann prüfst Du ob xpos auch wirklich 0 ist, um es dann wieder auf komplizierte Weise auf WIDTH zu setzen.
Das würde viel einfacher gehen:

Code: Alles auswählen

xpos = WIDTH
Was aber an dieser Stelle im Code auch schon gegeben ist, so dass man den ganzen Block weglassen könnte.
War mehr eine aneinanderreihung von wirren ideen, aber du hast vollkommen recht
hab's jetzt zum laufen gebracht, vielen dank dir!
Antworten