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

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



Check the docs. The second argument must be an instance or subclass of Group.

Cheers.

Gumm

On Mon, Feb 20, 2012 at 5:47 PM, scott@xxxxxxxxxxxxxxx <scott@xxxxxxxxxxxxxxx> wrote:
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 = "">    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()