2017-05-27 14 views
1

私は画面に上の背景画像をブリットしようとしています、しかし、私はこのエラーに実行し続けるように見える:例外TypeErrorが

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

エラーメッセージがこの方を向いていますコードの行:

Background.update() 

Iは外部ブリットとクラスの内部の周りに移動しようとしているが、同じエラーメッセージが現れて続けます。私の推測では、これもまた船舶のコードに影響するだろうということです。

これは全体PYファイルです:

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() 

編集:

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

答えて

1

それはメッセージが言う正確に何:以下の問題を修正する更新コードを変更する

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

これは、インスタンス(オブジェクト)の代わりにクラスを呼び出すことを意味します。 Pythonモジュールでは、大文字と小文字が区別されます。次のように

大文字でない行はなります。

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

私はそれを動作させるために末尾に ''(画面)を追加する必要がありました。私は、Pythonモジュールを大文字にする必要がありますインスタンスをすべきではないことを教えてくれて、これは私が将来このような問題を避けるのに役立つはずです。 –

+0

そうです。一定。 – BernardoGO

+0

@BernardoGOあなたの答えが私とどう違うのですか? – eyllanesc