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.
>>
>
>

Reply via email to