2017-06-21 3 views
0

Ich bin sehr neu zu Python und ich habe versucht, ein Spiel zu machen. Aber ich möchte den Hintergrund kontinuierlich in eine Schleife bringen und ich kann es nicht machen. Hier ist mein Code:Hintergrund, der kontinuierlich in Python mit Pygame nach unten scrollt

import pygame 
pygame.init() 

width = 800 
height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 

ship_width = 35 
ship_height = 64 

disp = pygame.display.set_mode((width,height)) 

pygame.display.set_caption("Space Jump") 

clock = pygame.time.Clock() 

bg1 = pygame.image.load("Space.png") 
bg2 = pygame.image.load("Space.png") 

shipImg = pygame.image.load("Ship.png") 

def ship(x,y): 
    disp.blit(shipImg, (x,y)) 

def gameLoop(): 
    x = (width * 0.45) 
    y = (height * 0.8) 

x_ch = 0 
y_ch = 0 

x_bg = 0 
y_bg = bg1.get_height() 

gameExit = False 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       x_ch = -5 
      elif event.key == pygame.K_RIGHT: 
       x_ch = 5 
      elif event.key == pygame.K_UP: 
       y_ch = -5 
      elif event.key == pygame.K_DOWN: 
       y_ch = 5 


     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_ch = 0 
      if event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
       y_ch = 0 

    x += x_ch 
    y += y_ch 

    if x > width - ship_width or x < 0: 
     x_ch = 0 

    if y > height - ship_height or y < 0: 
     y_ch = 0 

    disp.blit(bg1, (0,x_bg)) 
    disp.blit(bg2, (0,y_bg)) 

    ship(x,y) 

    pygame.display.update() 

    x_bg += 1 
    y_bg += 1 

    if x_bg == -1 * x_bg.get_height(): #This is the part I'm stuck on 
     x_bg = y_bg + y_bg.get_height() #When I run this i get and error: 
             #if x_bg == -1 * x_bg.get_height(): 
             #AttributeError: 'int' object has no 
             #attribute 'get_height' 
    if y_bg == -1 * y_bg.get_height(): 
     y_bg = x_bg + x_bg.get_height() 

    clock.tick(30) 

gameLoop() 
pygame.quit() 
quit() 

So bekomme ich einen Fehler, wenn ich diesen Code ausführen, aber wenn ich es funktioniert einfach den Hintergrund-Code auf eine neue Datei zu schreiben, aber der Hintergrund endet an einem gewissen Punkt nicht Schleife der Fall ist. Ich habe versucht, diesen Looping Hintergrund für die letzten 3 Tage zu tun, bitte hilf mir. Vielen Dank.

+0

Ich habe es funktioniert, dank Mad Meesh aber der Hintergrund endet irgendwann kann jemand mir sagen, wie ich es schleifen kann, so dass es nicht endet? –

Antwort

1

ok Ich habe nicht verwendet pygame vor, aber nur ein kurzer Blick auf Ihren Code und die Dokumente, es sieht aus wie Sie get_height() auf eine Nummer (x_bg und y_bg) nicht anrufen, was pygame als surface Objekt bezeichnet.

Der Fehler, grob übersetzt, sagt, dass Zahlen keine Methode mit dem Namen get_height() haben.

Ihre surface Objekte sind definiert als bg1 und bg2 so meine Vermutung wäre, dass diejenigen die Methode haben würden.

einfach die Variablen mit den richtigen auslagern und der Fehler sollte weg sein.

+0

Es funktioniert jetzt aber jetzt, wie bekomme ich es in die Schleife? Es endet irgendwann. –

+0

ich bin sicher, es gibt viele Möglichkeiten, es zu tun, aber hier ist eine _very_ kondensierte Beschreibung von , wie ich Parallaxing Ebenen erreicht: Annahme (0,0) ist unten links und Sie möchten die BG von unten nach oben scrollen: '- 3 Kopien des Bildes - h = img Höhe - richten Sie die Kopien an der gleichen x - img1.y = zentriert - img2.y = h - img3.y = h * 3 * -1 - definieren zwei Variablen 'scroll_speed' und ‚distance = 0'' an jedem Rahmen ' - für jede img tun img.y + = scroll_speed - do Abstand + = scr oll_speed - wenn entfernung> h, wechsle y von img2 mit img3, entferne die entfernung auf 0' –

+0

sorry ich habe es schon funktioniert wie vor einer Stunde danke anyways –

0

Ich bin nicht ganz sicher, was einige von Ihrem Code versucht zu tun, aber ich kann Sie beginnen.

Sie den Fehler sehen kann, sagt: „Attribute:‚int‘Objekt kein Attribut‚Get_Height‘hat“

Dies wird Ihnen sagen, dass x_bg eine ganze Zahl, und nicht ein Objekt, so dass es nicht zugreifen kann Attribut namens 'get_height'. Ich würde empfehlen, mehr über Objekte und Funktionen in Python zu lernen und wie sie funktionieren.

Es scheint, wie Sie bereits x_bg und y_bg als die Position Ihres Hintergrund verwenden, so gibt es keine Notwendigkeit zu versuchen, eine Funktion namens Get_Height zu verwenden, können Sie es mit ersetzen:

if x_bg == -1 * x_bg: 
    x_bg = y_bg + y_bg 

Ein weiteres Problem Mit diesem Stück Code wird überprüft, ob der Wert von x_bg exakt gleich zu einer Zahl ist. Während dies manchmal funktionieren kann, besonders wenn Sie nur mit Ganzzahlen arbeiten, ist es normalerweise eine gute Idee zu überprüfen, ob Ihre Variable größer/kleiner als eine Zahl ist. Wenn Ihr Hintergrund beispielsweise y = 99 ist und Sie nach y == 100 suchen, aber der Bildschirm sich um 2 Pixel pro Schritt bewegt, wird Ihre Bedingung nie erreicht. Wenn Sie nach y> 100 suchen, sollte dies immer der Fall sein gefangen werden. möchten Sie vielleicht so etwas wie:

if y_bg < 0: 
    y_bg = height 

nicht perfekt Dies funktioniert, aber es sollte keine Fehler verursachen und sollten Sie auf dem richtigen Weg helfen

Verwandte Themen