Saturday, 15 September 2012

python - Pygame throws "TypeError" when creating a custom sprite class -



python - Pygame throws "TypeError" when creating a custom sprite class -

i trying create scenery images moving in different speeds 1 side of screen other, creating parallax effect. utilize sprite class called backgroundobject, when seek create sprite using backgroundobject, getting typeerror.

the code i'm using follows:

import pygame pygame.locals import * import sys, random, os import vector # background objects (for parallax) class backgroundobject(pygame.sprite.sprite): def _init_(self, x, y, image, speed): pygame.sprite.sprite._init_(self) self.image = image self.rect = self.image.get_rect() self.rect.topleft = (x,y) self.speed = speed def update(self, time_passed): moved_distance = time_passed * self.speed self.rect.left += moved_distance if self.rect.right < 0: self.rect.left= self.rect.width pygame.init() screen = pygame.display.set_mode((768, 1024), 0, 32) obstacleimage = "obstacle.png" fenceimage = "fences.png" cloudimage = "clouds.png" cityimage = "cityscape.png" groundimage = "bottom.png" backgroundimage = "background.png" pathname = "assets" # sprites in game obstacles = pygame.sprite.group() backgrounds = pygame.sprite.orderedupdates() backgroundorder = [] backdrop = pygame.image.load(os.path.join(pathname + os.sep + backgroundimage)) fences = pygame.image.load(os.path.join(pathname + os.sep + fenceimage)) clouds = pygame.image.load(os.path.join(pathname + os.sep + fenceimage)) cityscape = pygame.image.load(os.path.join(pathname + os.sep + cityimage)) ground = pygame.image.load(os.path.join(pathname + os.sep + cityimage)) sprite = backgroundobject(1280, 192, clouds, 192) backgrounds.add(sprite) backgrounds.add(backgroundobject(0, 192, clouds, 192)) backgrounds.add(backgroundobject(832, 768, cityscape, 154)) backgrounds.add(backgroundobject(0, 768, cityscape, 154)) backgrounds.add(backgroundobject(1728, 768, fences, 384)) backgrounds.add(backgroundobject(0, 768, fences, 384)) backgrounds.add(backgroundobject(992, 896, ground, 512)) backgrounds.add(backgroundobject(0, 896, ground, 512)) titlescreen = pygame.image.load(os.path.join(pathname + backgroundimage)) clock = pygame.time.clock() while true: event in pygame.event.get(): if event.type == quit: exit() screen.blit(titlescreen, titlescreen.rect) backgrounds.update(time_passed) backgrounds.draw() item in background: if item.rect.right < 0: item.rect.right += (item.rect.width * 2)

the error message recieving follows, , can't create sense out of it:

traceback (most recent phone call last): file "test.py", line 45, in <module> sprite = backgroundobject(1280, 192, clouds, 192) file "/usr/lib/python2.7/dist-packages/pygame/sprite.py", line 114, in __init__ if groups: self.add(groups) file "/usr/lib/python2.7/dist-packages/pygame/sprite.py", line 129, in add together else: self.add(*group) file "/usr/lib/python2.7/dist-packages/pygame/sprite.py", line 129, in add together else: self.add(*group) typeerror: add() argument after * must sequence, not int

you misspelled __init__; utilize two underscores before , after:

class backgroundobject(pygame.sprite.sprite): def __init__(self, x, y, image, speed): pygame.sprite.sprite.__init__(self) self.image = image self.rect = self.image.get_rect() self.rect.topleft = (x,y) self.speed = speed

your traceback shows backgroundobject() goes straight sprite.__init__ without first passing through method.

python pygame sprite

No comments:

Post a Comment