2017-08-27 3 views
1

Ich möchte die draw und move Methoden für jeden Artikel von my_list aufrufen. Ich versuchte my_objects.draw() und my_objects.move() anstelle von i.draw() und i.move(), aber ich bekomme immer den gleichen Fehler. Hier ist mein Code:Python - Pygame AttributeError: int Objekt hat kein Attribut 'zeichnen'

import pygame 
import random 

BLACK = (0, 0, 0) 
GREEN = (0, 255, 0) 

class Rectangle(): 
    def __init__(self): 
     self.x = random.randrange(0, 700) 
     self.y = random.randrange(0, 500) 
     self.height = random.randrange(20, 70) 
     self.width = random.randrange(20, 70) 
     self.change_x = random.randrange(-3, 3) 
     self.change_y = random.randrange(-3, 3) 

    def move(self): 
     self.x += self.change_x 
     self.y += self.change_y 

    def draw(self): 
     pygame.draw.rect(screen, GREEN, [self.x, self.y, self.width, self.height]) 

my_list = [] 

for number in range(10): 
    my_object = Rectangle() 
    my_list.append(my_object) 

pygame.init() 

screen = pygame.display.set_mode((700, 500)) 
done = False 
clock = pygame.time.Clock() 

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

    screen.fill(BLACK) 

    for i in range(len(my_list)): 
     number.draw() 
     number.move() 

    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 

Hier wird der Fehler:

Traceback (most recent call last): 
    line 53, in <module> 
    number.draw() 
AttributeError: 'int' object has no attribute 'draw' 
+0

Überprüfen Sie die Einbuchtung bitte, aber ich scheint, dass 'number' erstellt, wenn Sie tun' für Nummer in range' und dies erklärt den Fehler als Zahl ein int ist, indem Sie diese – Y0da

Antwort

1

Sie sind durch Indizes laufen. Aber Sie wollen wirklich Elemente durchlaufen. Sie brauchen also keine range(len(...)) Konstruktion. Verwenden Sie stattdessen for item in items. Versuchen Sie folgendes:

for rect in my_list: 
    rect.draw() 
    rect.move() 
+0

Danke, es hat funktioniert ! Das bedeutet, ich brauchte keine Reichweite (len (my_list))? – Miray

+0

@Miray, richtig. 'range (len (my_list))' erzeugt einen Zahlenbereich von 0 bis 9, 'i' empfängt diese Werte. –

+0

@Miray Wenn Sie über einen "Bereich" iterieren, sind die Elemente, die Sie erhalten, eine Zahl in diesem Bereich, und Zahlen haben keine Zeichenmethoden. Wenn Sie selbst über "Meine_Liste" iterieren, erhalten Sie jedes Element von "Meine_Liste", das vermutlich über Zeichenmethoden verfügt. – Carcigenicate

Verwandte Themen