2017-07-29 2 views
0

Ich bekomme diesen Fehler immer wieder. Hier ist die vollständige Rückverfolgung.AttributeError: 'pygame.Surface' Objekt hat kein Attribut 'rect'

Traceback (most recent call last): 
File "C:/Users/Luc/PycharmProjects/game_practice/game.py", line 23, in 
<module> 
run_game() 
File "C:/Users/Luc/PycharmProjects/game_practice/game.py", line 13, in 
run_game 
player = Player(ai_settings, screen) 
File "C:\Users\Luc\PycharmProjects\game_practice\player.py", line 8, in 
__init__ 
self.rect.centerx = screen.rect.left 
AttributeError: 'pygame.Surface' object has no attribute 'rect' 

Hier ist der Code für den „Player“ Datei, die ein Problem hat das:

class Player: 
    def __init__(self, ai_settings, screen): 
     self.screen = screen 
     self.screen_rect = screen.get_rect() 
     self.rect = pygame.Rect((0, 0), (ai_settings.player_width, 
     ai_settings.player_height)) 
     self.rect.centerx = screen.rect.left 
     self.rect.centery = screen.rect.ai_settings.screen_height/2 
     self.color = ai_settings.player_color 

    def draw_player(self): 
     pygame.draw.rect(self.screen, self.color, self.rect) 

Wenn ich kommentieren Sie diese beiden Zeilen:

self.rect.centerx = screen.rect.left 
self.rect.centery = screen.rect.ai_settings.screen_height/2 

Das Programm läuft mit dem initialisierten Rechteck (0,0) wie es sein sollte, also bin ich mir nicht wirklich sicher, warum das Objekt einen Attributfehler hat, wenn ich die anderen Zeilen einschließe.

Antwort

0

Die screen ist ein pygame.Surface, die kein rect Attribut hat, aber man kann durch den Aufruf screen.get_rect(), was Sie bereits tun in dieser Zeile einen rect mit der Größe der Oberfläche erhalten:

self.screen_rect = screen.get_rect() 

Jetzt einfach Verwenden Sie Ihre self.screen_rect anstelle von screen.rect und Ihr Code sollte funktionieren.

# To place the player at the midleft. 
self.rect.midleft = self.screen_rect.midleft 
Verwandte Themen