[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()