2017-06-10 20 views
1

Ich konnte die anderen Fragen in Stackoverflow nicht verstehen. Wenn sich der Kreis zum Ende des Bildschirms bewegt, bewegt er sich in die entgegengesetzte Richtung.Python TypeError: Argument 1 muss pygame.Surface sein, nicht pygame.Rect

import pygame 
import sys 
pygame.init() 
screen = pygame.display.set_mode([640,480]) 
screen.fill([255,255,255]) 
circle = pygame.draw.circle(screen, [255,0,0],[100,100],30,0) 
x = 50 
y = 50 
x_speed = 5 
y_speed = 5 

done = "False" 
while done == "False": 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done="True" 
    pygame.time.delay(20) 
    pygame.draw.rect(screen,[255,255,255],[x,y,30,30],0) 
    x = x + x_speed 
    y = y + y_speed 
    if x > screen.get_width() - 30 or x < 0: 
     x_speed = -x_speed 
    if y > screen.get_height() - 30 or y < 0: 
     y_speed = -y_speed 
    screen.blit(circle,[x,y]) 
    pygame.display.flip() 

pygame.quit() 

Eine Fehlermeldung wird ausgegeben, ohne dass sie implementiert wurde.

screen.blit(circle,[x,y])
TypeError: argument 1 must be pygame.Surface, not pygame.Rect

Was ist das Problem?

Antwort

1

pygame.draw.circle gibt ein pygame.Rect kein pygame.Surface und man kann nur blit Oberflächen nicht Rects (das ist, was die Zurückverfolgungs Sie erzählt). Erstellen Sie ein Oberflächenobjekt, verwenden Sie pygame.draw.circle, um einen Kreis darauf zu zeichnen, und blättern Sie dann diese Oberfläche auf den Bildschirm in Ihrer Hauptschleife.

import pygame 
import sys 

pygame.init() 
screen = pygame.display.set_mode([640,480]) 
screen.fill([255,255,255]) 

# A transparent surface with per-pixel alpha. 
circle = pygame.Surface((60, 60), pygame.SRCALPHA) 
# Draw a circle onto the `circle` surface. 
pygame.draw.circle(circle, [255,0,0], [30, 30], 30) 

x = 50 
y = 50 
x_speed = 5 
y_speed = 5 

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

    pygame.time.delay(20) 
    screen.fill((40, 40, 40)) 
    x = x + x_speed 
    y = y + y_speed 
    if x > screen.get_width() - 60 or x < 0: 
     x_speed = -x_speed 
    if y > screen.get_height() - 60 or y < 0: 
     y_speed = -y_speed 
    # Now blit the surface. 
    screen.blit(circle, [x, y]) 
    pygame.display.flip() 

pygame.quit() 
sys.exit() 
+0

pygame.draw.circle (Kreis, [255.0.0], [30, 30], 30), Wenn [30, 30] erhöht wird, die kollidierenden Wand kein Fenster Fenster ist. Es scheint nicht mit pygame Oberfläche() verwandt zu sein. Was ist das Problem? Lass mich die Antwort wissen ... – SsolGom

+0

'Wenn x> screen.get_width() - 30', musst du die 30 auf 60 ändern, denn das ist die Größe des Kreises in meinem Beispiel. Ich habe die Antwort bearbeitet. – skrx

Verwandte Themen