Oh. I see. Thank you very much. I knew it had to be something simple. On Mon, Jul 28, 2008 at 5:40 PM, Brian Fisher <[EMAIL PROTECTED]>wrote:
> They are all using the same rect object, and you are positioning that 1 > single rect to the location of the wall. So collision is working for all, > but all of them are positioned in the same place. > > Instead of calling get_rect once and reusing the result, you should pass > the image to each sprite and have them each call get_rect themselves to get > their own unique rect. > > > > On Mon, Jul 28, 2008 at 8:36 PM, <[EMAIL PROTECTED]> wrote: > >> I want to display sprites with the same graphic across several areas >> of my game. So I load the image into one variable, and then create all >> my sprites from that same image. >> >> All the sprites appear properly, but collision detection only works on >> the last sprite drawn using the variable with the image. Why is this? >> Do I have to reload the image everytime? >> >> This is my code to load the image: >> >> def load_image(name, transparent=0, colorkey=None): #from the line-by- >> line chimp tutorial >> fullname = os.path.join('img', name) >> try: >> if transparent == 0: >> image = pygame.image.load(fullname).convert() >> else: >> image = pygame.image.load(fullname).convert_alpha() >> except pygame.error, message: >> print 'Cannot load image:', name >> raise SystemExit, message >> if colorkey is not None: >> if colorkey is -1: >> colorkey = image.get_at((0,0)) >> image.set_colorkey(colorkey, RLEACCEL) >> return image, image.get_rect() >> >> To setup the sprite: >> >> class Units(pygame.sprite.Sprite): >> >> def __init__(self, img, loc1 = 250, loc2 = 250): >> pygame.sprite.Sprite.__init__(self) #start up sprites >> >> #locs >> self.loc1 = loc1 >> self.loc2 = loc2 >> >> #create sprite >> self.image, self.rect = img >> self.rect.center = [self.loc1, self.loc2] >> >> and actually making the sprites: >> >> wallGfx = load_image('wall.png', 1) >> self.wall1 = Units(wallGfx2, 400, 325) >> self.screen.blit(self.wall1.image, self.wall1.rect) >> >> self.wall2 = Units(wallGfx, 400, 400) >> self.screen.blit(self.wall2.image, self.wall2.rect) >> self.egroup = pygame.sprite.RenderUpdates(self.wall1, self.wall2) >> >> pygame.display.update() >> >> Now, doing this, only the sprite at 400,400 (self.wall2) will have >> proper collision detection. They're both displayed, but only the last >> one added to the group has it. If I remove self.wall2, self.wall1 will >> detect it properly. >> >> Any ideas? >> >> Thanks in advance. >> > >