User Tools

Site Tools


pygame_sprites_i

PyGame Sprites I

As found in bullet game.

The first kind of sprite we used is a simple kind of sprite that we drew ourselves.

Creating the Sprite

In Bullet game, we have a “class Zombie”. Here is a brief analysis of the code.

init()

To create the image of the sprite, we create a pygame surface large enough to hold the sprite. In this particular case we just want a square so we will use image.fill() on the surface to paint it a certain color. Then we're done. We get the rect info and set the rect.center and we're done. dx and dy is directional information we will use in update().

update()

In this case, update() is a somewhat special function that is intended to be called at regular intervals, in this case every frame (ex. 60 fps is 60 times per second). Understanding update() is very easy:

  • 1. Step the movement (using the speed variable). In this case we move once per second.
  • 2. Animate the image (changing the image we use based on time). This can be done in various ways, the way shown is not a requirement.
  • 3. handle movement by modifying rect.x and rect.y
  • 4. handle bounds (in this case if it goes off screen we remove it from the game).
  • 5. anything else

The update function is usually the only hook function you will need, but you can create others to help you control the sprite in your game. One idea is to make an explosion routine that replaces the image with an explosion temporarily before removing it from the game.

The Code

# Define the Zombie Sprite
class SpaceShip(pygame.sprite.Sprite):
    HEIGHT = 20
    WIDTH = 50
    SPEED = 60
    
    def __init__(self, x, y, dx = 0, dy = -1):
        super().__init__()

        # Create a surface for the bullet
        self.image = pygame.Surface((self.WIDTH, self.HEIGHT))

        # Fill the surface with a color
        self.image.fill(self.COLOR)

        # Get the rectangle for positioning
        self.rect = self.image.get_rect()

        # directional info
        self.dx = dx
        self.dy = dy
        self.speed = self.SPEED

        # Set the initial position
        self.rect.center = (x, y)
        self.timer = 0
        self.start = time.time() * 1000


    def update(self):
        self.timer = (time.time() * 1000) - self.start

        # Wait to move zombie
        self.speed -= 1
        if self.speed > 0:
            return

        # alternate image every time we move.
        if self.frame == 0:
            self.frame = 1
            self.image = self.image_b

        else:
            self.frame = 0
            self.image = self.image_a

        # Speed is 0, 'tick' to move:
        self.speed = self.SPEED


        # Move the zombie directionally
        self.rect.x += self.dx * self.STEP
        self.rect.y += self.dy * self.STEP


        if self.rect.bottom < 0:
            self.kill()
            print("zombie escaped n")
        if self.rect.top > Screen.HEIGHT:
            self.kill()
            print("zombie escaped s")
        if self.rect.left < 0:
            self.kill()
            print("zombie escaped w")
        if self.rect.right > Screen.WIDTH:
            self.kill()
            print("zombie escaped e")

pygame_sprites_i.txt · Last modified: 2024/09/11 06:57 by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki