'pygame.Surface' object has no attribute 'color'
所以,我的问题是,我试图画一个矩形,但我不断地得到一个错误,说
完整错误消息
1 2 3 4 5 6 7 8 9 10 11 12 | Traceback (most recent call last): File"main.py", line 64, in <module> game.new() File"main.py", line 23, in new self.run() File"main.py", line 32, in run self.draw() File"main.py", line 55, in draw self.snake.draw(self.screen) File"C:\Users\sidna\Dropbox\Dev Stuff\Games\Snake\sprites.py", line 15, in draw pygame.draw.rect(screen, self.color AttributeError: 'pygame.Surface' object has no attribute 'color' |
Pyth.Py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import pygame class Snake(): def __init__(self): self.x = 0 self.y = 0 self.w = 10 self.h = 10 self.velX = 1 self.velY = 0 self.color = (0, 0, 0) def draw(screen, self): pygame.draw.rect(screen, self.color (self.x, self.y, self.w, self.h)) def animate(self): self.x = self.x + self.velX self.y = self.y + self.velY |
Me.Py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | from settings import * from sprites import * import pygame import random class Game: def __init__(self): # initialize game window, etc pygame.init() pygame.mixer.init() self.screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption(TITLE) self.clock = pygame.time.Clock() self.running = True def new(self): # start a new game self.snake = Snake() self.run() def run(self): # Game Loop self.playing = True while self.playing: self.clock.tick(FPS) self.events() self.draw() self.animate() self.update() def update(self): # Game Loop - Update pygame.display.update() def events(self): # Game Loop - events for event in pygame.event.get(): # check for closing window if event.type == pygame.QUIT: if self.playing: self.playing = False self.running = False def draw(self): # Game Loop - draw self.screen.fill((255, 255, 255)) self.snake.draw(self.screen) def animate(self): self.snake.animate() game = Game() while game.running: game.new() pygame.quit() |
跟随python zen explicit比implicit好。
Often, the first argument of a method is called self. This is nothing
more than a convention: the name self has absolutely no special
meaning to Python. Note, however, that by not following the convention
your code may be less readable to other Python programmers, and it is
also conceivable that a class browser program might be written that
relies upon such a convention.
这意味着您应该将第一个参数设置为
1 2 | def draw(self,screen): pygame.draw.rect(screen, self.color,(self.x, self.y, self.w, self.h)) |
看看这个问题,为什么总是把self作为类方法的第一个参数?和Python文档以查看更多细节。