2017-05-27 8 views
1

Ich versuche, auf dem Bildschirm, um das Hintergrundbild blitten jedoch scheine ich zu diesem Fehler laufen in zu halten:Typeerror erstellt in Pygame im Hintergrund blit Code

TypeError: unbound method update() must be called with Background instance as first argument (got nothing instead) 

Die Fehlermeldung wird in diese Richtung weis Codezeile:

Background.update() 

ich außen um die blit bewegt haben versucht, und innerhalb der Klasse, aber die gleiche Fehlermeldung hält zeigt nach oben. Meine Vermutung ist, dass dies auch den Schiffscode beeinflussen würde.

Dies ist die gesamte py-Datei:

import pygame 
from pygame.locals import * 

# Colors 
RED  = (255,0,0) 
GREEN = (0,255,0) 
BLUE = (0,0,255) 

# Screen Size 
SCREEN_X = 400 
SCREEN_Y = 400 

# Loading Images 
background = pygame.image.load('StarBackground.png') 
powership = pygame.image.load('PowerShip.png') 

class Ship(pygame.sprite.Sprite): 

    # Movement rate of change 
    change_x = 0 
    change_y = 0 

    # Methods 
    def __init__(self): 

     # Starts the parent's constructor 
     pygame.sprite.Sprite.__init__(self) 

     # Sets the ship's image 
     self.image = powership 

     # Sets the ship's rect 
     self.rect = self.image.get_rect() 

     # Set the ship's start location 
     self.rect.x = 0 
     self.rect.y = 0 

    def move_right(self): 
     self.change_x = 1 

    def move_left(self): 
     self.change_x = 1 

    def move_up(self): 
     self.change_y = 1 

    def move_down(self): 
     self.change_y = 1 

    def stop_x(self): 
     self.change_x = 0 

    def stop_y(self): 
     self.change_y = 0 

    def update(self, screen): 
     self.rect.x += self.change_x 
     self.rect.y += self.change_y 

     screen.blit(self.image,self.rect) 

class Background(pygame.sprite.Sprite): 

    def __init__(self): 

     # Starts the parent's constructor 
     pygame.sprite.Sprite.__init__(self) 

     # Sets the ship's image 
     self.image = background 

     # Sets the ship's rect 
     self.rect = self.image.get_rect() 

     # Sets the background's starting location 
     self.rect.x = 0 
     self.rect.y = 0 

    def update(self, screen): 

     screen.blit(self.image,self.rect) 

def main(): 
    pygame.init() 

    # Set the height and width of the screen 
    size = [SCREEN_X, SCREEN_Y] 
    screen = pygame.display.set_mode(size) 

    pygame.display.set_caption("Space Adventure") 

    # Creating the game objects 
    background = Background() 
    ship = Ship() 

    # Close button exit code 
    finished = False 

    # Manages the frames per second 
    clock = pygame.time.Clock() 

    # Game loop 
    while not finished: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       finished = True 

      keyboardInput = pygame.key.get_pressed() 

      if event.type == pygame.KEYDOWN: 
       if keyboardInput[K_RIGHT]: 
        ship.move_right() 
       if keyboardInput[K_LEFT]: 
        ship.move_left() 
       if keyboardInput[K_UP]: 
        ship.move_up() 
       if keyboardInput[K_DOWN]: 
        ship.move_down() 

      if event.type == pygame.KEYUP: 
       if keyboardInput[K_RIGHT]: 
        ship.stop_x() 
       if keyboardInput[K_LEFT]: 
        ship.stop_x() 
       if keyboardInput[K_UP]: 
        ship.stop_y() 
       if keyboardInput[K_DOWN]: 
        ship.stop_y() 

      clock.tick(60) 
      pygame.display.flip() 
      Background.update() 
      Ship.update() 

    pygame.quit() 

if __name__ == "__main__": 
    main() 

Edit: die Update-Code auf die folgende Fest der Ausgabe ändern:

Background.update(screen) 
Ship.update(screen) 

Antwort

1

Es ist genau das, was die Botschaft sagt:

TypeError: unbound method update() must be called with Background instance as first argument (got nothing instead)

Es bedeutet, dass Sie die Klassen anstelle der Instanzen (Objekte) aufrufen. In Python-Modulen werden Groß- und Kleinbuchstaben verwendet.

Die Linien nicht aktiviert sollen wie folgt aussehen: es funktioniert

background.update(screen) 
ship.update(screen) 
+0

ich hinzufügen musste '(Bildschirm)' am Ende zu machen. Danke, dass Sie mir gesagt haben, dass Python-Module groß geschrieben werden sollten und Instanzen nicht, das sollte mir helfen, solche Probleme in Zukunft zu vermeiden. –

+0

Das stimmt. Fest. – BernardoGO

+0

@BernardoGO Was für ein Unterschied Ihre Antwort mit mir hat. – eyllanesc

Verwandte Themen