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

Re: [pygame] circles



At this point I don't really care if the sprites write over eachother...as long as that doesn't cause the program to crash.  I'm just trying to get four circles going diagonally from each corner.  The problem I'm having is with the update function...Do I write two update functions?  How do I get the update function to apply separate code for the two (or more) circles? Here is my code as it stands:

import pygame
pygame.init()

screen = pygame.display.set_mode((640, 480))

class Circle(pygame.sprite.Sprite):
    def __init__(self, color):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill((255, 255, 255))
        pygame.draw.circle(self.image, (color), (25, 25), 25)
        self.rect = self.image.get_rect() 
        self.startPosx = self.rect.centerx
        self.startPosy = self.rect.centery
        self.dx = 5
        self.dy = 5
        
        
    def update(self):
            self.rect.centerx += self.dx
            self.rect.centery += self.dy
            if self.rect.right > screen.get_width():
                self.rect.left = 0
            if self.rect.top > screen.get_height():
               self.rect.bottom = 0

    def update_circle2(self):
        self.rect.centerx -= self.dx
        self.rect.centery += self.dy
        if self.rect.left < 0:
            self.rect.right = 0
        if self.rect.top > screen.get_height():
            self.rect.bottom = 0

def main():
    pygame.display.set_caption("Diagonal Circle")

    background = "">
    background.fill((255, 255, 255))
    screen.blit(background, (0, 0))
    
    circle1 = Circle(pygame.color.Color("yellow"))
    circle2 = Circle(pygame.color.Color("red"))
    circle1.startPosx = 0
    circle1.startPosy = 0
    circle2.startPosx = screen.get_width()
    circle2.startPosy = 0 
    
    
    allSprites = pygame.sprite.Group(circle1, circle2)

    clock = pygame.time.Clock()
    keepGoing = True
    while keepGoing:
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                keepGoing = False

        allSprites.clear(screen, background)
        allSprites.update()
        allSprites.draw(screen)

        pygame.display.flip()

if __name__ == "__main__":
    main()

pygame.quit()
        
        
        




On Sat, Oct 2, 2010 at 6:43 PM, Ian Mallett <geometrian@xxxxxxxxx> wrote:
Hi,

Your code only makes one circle.  How can you possibly expect four circles, when you only make one?  From the spec, you need to add other instances of your circle sprite in your pygame.sprite.Group() call.  Hint: try "[circle1,circle2,circle3,circle4]"

If you tried this, then you'll see (or rather won't, but that's what's happening) that all the sprites draw over each other.  You'll need to write separate logic for each sprite's update function, or all the sprites will draw on top of each other.  I've done this by passing (varying) extra arguments to your sprites' constructors to alter their internal states.

Ian