Ich versuche, ein Spiel in Python mit PyGame zu machen, aber ich erhalte diese Zurückverfolgungs:Wie PC Spielfehler zu lösen ist Wasserspiel?
Traceback (most recent call last):
File "C:\Users\usuario\Documents\abscorp\232\232.py", line 150, in
<module>
hits = pygame.sprite.groupcollide(drop, player, True, True)
File "C:\Python27\lib\site-packages\pygame\sprite.py", line 1536, in
groupcollide
c = SC(s, groupb, dokillb, collided)
File "C:\Python27\lib\site-packages\pygame\sprite.py", line 1500, in
spritecollide
for s in group.sprites():
AttributeError: 'Player' object has no attribute 'sprites'
Es gibt bestimmten Wassertropfen, die zufällig aus den Rohren fallen sollte, aber IDLE hält mir eine Fehlermeldung zu geben. Ich glaube, der Teil, der den Fehler erzeugt, ist der folgende: "pygame.sprite.groupcollide".
Der vollständige Code ist unten beigefügt.
import pygame
import time
import sys
import random
WIDTH = 800
HEIGHT = 600
FPS = 360
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (168, 169, 173)
font_name = pygame.font.match_font('arial')
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("where is the drop!")
clock = pygame.time.Clock()
#Load all game graphics and sounds
background = pygame.image.load("bckgrnd_3.png").convert()
background_rect = background.get_rect()
boy_1_img = pygame.image.load("boy_1_img.png").convert()
drop_img = pygame.image.load("drop_img.png").convert()
explosion_anim = {}
explosion_anim['lg'] = []
explosion_anim['sm'] = []
for i in range(3):
filename = 'exp_{}.png'.format(i)
img = pygame.image.load(filename).convert()
img.set_colorkey(GRAY)
img_lg = pygame.transform.scale(img, (75, 75))
explosion_anim['lg'].append(img_lg)
img_sm = pygame.transform.scale(img, (32, 32))
explosion_anim['sm'].append(img_sm)
def newdrop():
d = Drop()
all_sprites.add(d)
drop.add(d)
class Drop(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.transform.scale(drop_img, (50, 38))
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.radius = int(self.rect.width * .85/ 2)
#pygame.draw.circle(self.image, RED, self.rect.center, self.radius)
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 2)
self.speedx = random.randrange(-1, 1)
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.top > HEIGHT + 10:
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 2)
class Player(pygame.sprite.Sprite):
#sprite for the Player
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.transform.scale(boy_1_img, (50, 38))
self.image.set_colorkey(WHITE)
self.rect = self.image.get_rect()
self.radius = 25
#pygame.draw.circle(self.image, RED, self.rect.center, self.radius)
self.rect.center = (WIDTH/1.5, HEIGHT/1.5)
self.shield = 100
self.shoot_delay = 250
self.last_shot = pygame.time.get_ticks()
def update(self):
self.speedx = 0
self.speedy = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speedx = -2
if keystate[pygame.K_RIGHT]:
self.speedx = 2
if keystate[pygame.K_UP]:
self.speedy = -2
if keystate[pygame.K_DOWN]:
self.speedy = 2
if keystate[pygame.K_SPACE]:
self.throw()
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.top > HEIGHT:
self.rect.top = HEIGHT
if self.rect.bottom < 0:
self.rect.bottom = 0
all_sprites = pygame.sprite.Group()
drop = pygame.sprite.Group()
player=Player()
all_sprites.add(player)
for i in range(8):
newdrop()
##pygame.mixer.music.play(loops=-1)
# Game Loop
score = 0
running= True
while running:
#keep loop running at the right speed
#Process input (events)
for event in pygame.event.get():
#check for closing window
if event.type == pygame.QUIT:
running= False
#Update
all_sprites.update()
#check to see if a drop hits bucket
hits = pygame.sprite.groupcollide(drop, player, True, True)
for hit in hits:
score += 1
##random.choice(expl_sounds).play()
expl = Explosion(hit.rect.center, 'lg')
all_sprites.add(expl)
newdrop()
#check to see if a drop hits big bucket
hits = pygame.sprite.spritecollide(bucket, drop, True,
pygame.sprite.collide_circle)
for hit in hits:
newdrop()
player.shield -= 10
expl = Explosion(hit.rect.center, 'sm')
all_sprites.add(expl)
if player.shield <= 0:
running = False
#print (player.shield)
#Draw/render
screen.fill(BLACK)
screen.blit(background, (0, 0))
all_sprites.draw(screen)
draw_text(screen, str(score), 18, WIDTH/2, 10)
draw_shield_bar(screen, 5, 5, player.shield)
#*after* drawing everything, flip the display
pygame.display.flip()
pygame.quit()
Schrei mich nicht an. : P – cHao
Bitte stoppen Sie SCHREIEN. Text in ALL CAPS ist schwer zu lesen und zu verstehen, und es ist extrem nervig. Ihre Umschalttaste funktioniert eindeutig, da Sie in Ihrem Code Kleinbuchstaben haben. Diese Shift-Tasten befinden sich auf beiden Seiten der Tastatur, sodass sie leicht zu erreichen sind, sodass Sie sie zum Lesen von Text verwenden können. Bitte benutze sie jetzt und bearbeite deinen Beitrag, um ihn richtig zu stellen. Während Sie diese Änderung vornehmen, können Sie die angezeigte Fehlermeldung einfügen, damit diese Informationen ebenfalls verfügbar sind. Sie bitten um ** kostenlose Hilfe **, um Ihr Problem ** zu lösen. Geben Sie die Details an und fragen Sie höflich. –
Ich weiß nicht, ob dies Auswirkungen hat, aber Sie sollten Ihre Player-Klasse deaktivieren. Wie oben gezeigt, liest Python Player() wie in Drop() enthalten. –