[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] HELP PLEASE: sprite collision - object not iterable error



We're having a problem with the code below, which is returning this error:

Traceback (most recent call last):
  File "C:\Users\HO\Desktop\USER\SERVER.Master\Python\Games\LightSlayer\LightSlayer.py", line 95, 
in <module>
    if pygame.sprite.spritecollide(monster, player, False):
  File "C:\Python25\lib\site-packages\pygame\sprite.py", line 1344, in spritecollide
    for s in group:
TypeError: 'Player' object is not iterable

- - -

Any feedback is appreciated. Thanks! 

code follows . . . 

- - -


#(c) 2012 Henry Olling

import pygame, sys
from pygame.color import THECOLORS

class Player(pygame.sprite.Sprite):                                  
    def __init__(self, image_file, speed, location):              
        pygame.sprite.Sprite.__init__(self)  #call Sprite initializer     
        self.image = pygame.image.load(image_file)                        
        self.rect = self.image.get_rect()                                 
        self.rect.left, self.rect.top = location                          
        self.speed = speed

class Monster(pygame.sprite.Sprite):                                  
    def __init__(self, image_file, speed, location):              
        pygame.sprite.Sprite.__init__(self)  #call Sprite initializer     
        self.image = pygame.image.load(image_file)                        
        self.rect = self.image.get_rect()                                 
        self.rect.left, self.rect.top = location                          
        self.speed = speed

    def move(self):
        self.rect = self.rect.move(self.speed)                            
        # bounce off the sides of the window                              
        if self.rect.left < 0 or self.rect.right > screen.get_width():    
            self.speed[0] = -self.speed[0]
            
        # bounce off the top of the window                                
        if self.rect.top <= 0 :                                           
            self.speed[1] = -self.speed[1]
        if self.rect.top >= 575:                                           
            self.speed[1] = -self.speed[1]

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode([600,600])
clock = pygame.time.Clock()
player = Player('Player.png', [10,10], [50, 50])
monster = Monster('Monster.png', [7,5], [7,5])
MGroup = pygame.sprite.Group(monster)
PGroup = pygame.sprite.Group(player)

#VAR
points = 0
health = 100
KILLS = 0

#TEXT
font = pygame.font.Font(None, 50)
score_text = font.render(str(points), 1, (0,255,0))
textpos = [10,10]

font = pygame.font.Font(None, 50)
health_text = font.render(str(health), 1, (0, 255, 0))
textpos1 = [50,10]

#MUSIC
Shot_S = pygame.mixer.Sound('0001.wav')
Score = pygame.mixer.Sound('0002.wav')
Kill = pygame.mixer.Sound('0003.wav')
GameOver = pygame.mixer.Sound('0004.wav')

pygame.mixer.music.load('CS.mp3')
pygame.mixer.music.play(-1)
pygame.time.delay(200)

#MAIN
while 1:
    clock.tick(30)                                                       
    screen.fill([255, 255, 255])
    bgdtile = pygame.image.load('BAK.png')
    
    background = pygame.Surface([1000,900])
    for x in range(0, 10000, bgdtile.get_width()):
        background.blit(bgdtile, (x, 0))
    screen.blit(background, (0,0))
   

    monster.move()

    for event in pygame.event.get():                                     
        if event.type == pygame.QUIT:                                           
            sys.exit()
            SystemExit 
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                player.rect.top = player.rect.top - 100
            if event.key == pygame.K_DOWN:
                player.rect.top = player.rect.top + 100
            if event.key == pygame.K_RIGHT:
                player.rect.left = player.rect.left + 100
            if event.key == pygame.K_LEFT:
                player.rect.left = player.rect.left - 100

    if pygame.sprite.spritecollide(monster, player, False):
        Kill.play()
                
    screen.blit(player.image, player.rect)
    screen.blit(monster.image, monster.rect)
    screen.blit(health_text, textpos1)
    screen.blit(score_text, textpos)
    pygame.display.flip()