2016-11-15 11 views
0

Nicht sicher, ob das, was ich versuche, falsch oder unmöglich ist. Hier ist mein Code:Argument 1 muss pygame.Surface sein, nicht Window

import pygame 

class Window(object): 
    def __init__(self, (width, height), color, cap=' '): 
     self.width = width 
     self.height = height 
     self.color = color 
     self.cap = cap 
     self.screen = pygame.display.set_mode((self.width, self.height)) 
    def display(self): 
     self.screen 
     #screen = 
     pygame.display.set_caption(self.cap) 
     self.screen.fill(self.color) 

class Ball(object): 
    def __init__(self, window, (x, y), color, size, thick=None): 
     self.window = window 
     self.x = x 
     self.y = y 
     self.color = color 
     self.size = size 
     self.thick = thick 
    def draw(self): 
     pygame.draw.circle(self.window, self.color, (self.x, self.y), 
          self.size, self.thick) 

def main(): 
    black = (0, 0, 0) 
    white = (255, 255, 255) 
    screen = Window((600, 600), black, 'Pong') 
    screen.display() 
    ball = Ball(screen, (300, 300), white, 5) 
    ball.draw() 

    running = True 

    while running: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       running = False 

     pygame.display.flip() 
    pygame.quit() 
main() 

Dies ist der Fehler, den ich bekommen:

Traceback (most recent call last): 
    File "C:\Users\acmil\Desktop\Team 7\newPongLib.py", line 47, in <module> 
    main() 
    File "C:\Users\acmil\Desktop\Team 7\newPongLib.py", line 36, in main 
    ball.draw() 
    File "C:\Users\acmil\Desktop\Team 7\newPongLib.py", line 28, in draw 
self.size, self.thick) 

Typeerror: Argument 1 muss pygame.Surface sein, nicht Fenster

Ich verstehe nicht, wenn ich machen ein Window-Objekt, weshalb es keinen Ball auf den Bildschirm zeichnet. Jede Hilfe wird geschätzt.

Antwort

0

Ändern Sie Ihre Kugel Klasse auf die folgenden:

class Ball(object): 
    def __init__(self, window, (x, y), color, size, thick=0): 
     self.window = window 
     self.x = x 
     self.y = y 
     self.color = color 
     self.size = size 
     self.thick = thick 
    def draw(self): 
     pygame.draw.circle(self.window.screen, self.color, (self.x, self.y), 
          self.size, self.thick) 

Ich habe zwei Änderungen an Ihrem Code.

  • Zuerst wird, wie für den Fehler, den Sie waren immer, Sie in einem benutzerdefinierten Window Objekt übergeben wurden, die Sie Screen Objekt anstelle der pygame die definiert hatte, dass pygame erwartete. Beachten Sie die Dokumentation zu dieser Funktion here.
  • Zweitens hat Ihr ursprünglicher Konstruktor standardmäßig thick=None definiert, aber diese Pygame-Funktion erwartet einen int, also habe ich ihn in thick=0 geändert.

Es sollte nach diesen beiden Änderungen funktionieren. Lass es mich wissen, wenn du noch Probleme hast!

Verwandte Themen