Sprite¶
Make creating games with 2D sprites more easy and clean.
Download the sprite.py
file to use the
module.
-
class
sprite.
Sprite
(x=0, y=0, image_name=None)¶ Class that represents a moveable 2D image.
Parameters: - x (float) – The x-coordinate, in pixels, of the center of the sprite.
- y (float) – The y-coordinate, in pixels, of the center of the sprite.
- image_name (str) – The file name of the image to draw when drawing the sprite. The image must be a gif file.
Attributes¶
-
Sprite.
x
¶ The x-coordinate, in pixels, of the center of this sprite.
-
Sprite.
y
¶ The y-coordinate, in pixels, of the center of this sprite.
-
Sprite.
image_name
¶ The name of the image to draw, when drawing this sprite.
Methods¶
Examples¶
Here is an example of using the collides and uncollide methods to prevent two sprites from overlapping:
import graphics
import sprite
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480
IMAGE = "rectangle.gif"
# Initialize window
graphics.window_size(WINDOW_WIDTH, WINDOW_HEIGHT)
graphics.window_title("Sprites")
graphics.window_background_color("white")
# Initialize player and platform sprites
sprite_1 = sprite.Sprite(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, IMAGE)
sprite_2 = sprite.Sprite(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, IMAGE)
# Main loop
while graphics.window_open():
# Clear the screen
graphics.clear()
# Update sprite 1 so it is where the mouse is,
# unless it overlaps with sprite 2
if graphics.mouse_moved():
sprite_1.x = graphics.mouse_x()
sprite_1.y = graphics.mouse_y()
if sprite_1.collides(sprite_2):
sprite_1.uncollide(sprite_2)
# Draw the scene
graphics.draw_sprite(sprite_1)
graphics.draw_sprite(sprite_2)
# Wait 1/30 to slow the animation to 30 frames per second
graphics.wait(0.033)
Here is an example that adds attributes to sprite objects to create a platform game:
import graphics
import sprite
import random
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480
PLAYER_IMAGE = "player.gif"
PLATFORM_IMAGE = "platform.gif"
PLAYER_RUN_SPEED = 10
PLAYER_JUMP_STRENGTH = 20
GRAVITY_STRENGTH = 2
# Initialize window
graphics.window_size(WINDOW_WIDTH, WINDOW_HEIGHT)
graphics.window_title("Platform Game")
graphics.window_background_color("white")
# Initialize player and platform sprites
platform = sprite.Sprite(WINDOW_WIDTH / 2, WINDOW_HEIGHT, PLATFORM_IMAGE)
player = sprite.Sprite(WINDOW_WIDTH / 2, 0, PLAYER_IMAGE)
player.on_ground = False
player.velocity_y = 0
# Main loop
while graphics.window_open():
# Clear the screen
graphics.clear()
# Update the scene
if graphics.key_down('Right'):
player.x += PLAYER_RUN_SPEED
if graphics.key_down('Left'):
player.x -= PLAYER_RUN_SPEED
if player.collides(platform) and not player.on_ground:
player.uncollide(platform)
player.on_ground = True
player.velocity_y = 0
if graphics.key_down('Up') and player.on_ground:
player.on_ground = False
player.velocity_y = -PLAYER_JUMP_STRENGTH
if not player.on_ground:
player.y += player.velocity_y
player.velocity_y += GRAVITY_STRENGTH
# Draw the scene
graphics.draw_sprite(platform)
graphics.draw_sprite(player)
# Wait 1/30 to slow the animation to 30 frames per second
graphics.wait(0.033)
Here is an example of animating many sprites using the sprite module:
import graphics
import sprite
import random
NUMBER_OF_BALLS = 700
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480
BALL_IMAGE = "ball.gif"
BALL_WIDTH, BALL_HEIGHT = graphics.image_size(BALL_IMAGE)
BALL_RADIUS = BALL_WIDTH / 2
MAX_Y = WINDOW_HEIGHT - BALL_RADIUS
MAX_X = WINDOW_WIDTH - BALL_RADIUS
MIN_Y = BALL_RADIUS
MIN_X = BALL_RADIUS
MIN_DELTA_X = -10
MAX_DELTA_X = 10
MIN_DELTA_Y = -10
MAX_DELTA_Y = 10
# Returns a sprite at a random location
def init_sprite():
ball_x = random.randint(MIN_X, MAX_X)
ball_y = random.randint(MIN_Y, MAX_Y)
ball_delta_x = random.randint(MIN_DELTA_X, MAX_DELTA_X)
ball_delta_y = random.randint(MIN_DELTA_Y, MAX_DELTA_Y)
ball_sprite = sprite.Sprite(ball_x, ball_y, BALL_IMAGE)
ball_sprite.velocity_x = ball_delta_x
ball_sprite.velocity_y = ball_delta_y
return ball_sprite
# Update the location of the sprite so that bounces around the screen
def update_sprite(ball_sprite):
ball_sprite.x += ball_sprite.velocity_x
ball_sprite.y += ball_sprite.velocity_y
if ball_sprite.x > WINDOW_WIDTH - BALL_RADIUS:
ball_sprite.velocity_x *= -1
if ball_sprite.x < BALL_RADIUS:
ball_sprite.velocity_x *= -1
if ball_sprite.y > WINDOW_HEIGHT - BALL_RADIUS:
ball_sprite.velocity_y *= -1
if ball_sprite.y < BALL_RADIUS:
ball_sprite.velocity_y *= -1
# Animate many sprites bouncing around the screen
def main_loop():
balls = [init_sprite() for _ in range(NUMBER_OF_BALLS)]
graphics.window_size(WINDOW_WIDTH, WINDOW_HEIGHT)
graphics.window_title("Bouncing Balls")
graphics.window_background_color("white")
while graphics.window_open():
graphics.clear()
for i in range(len(balls)):
update_sprite(balls[i])
graphics.draw_sprite(balls[i])
graphics.draw_text("Bouncing", WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2,
"blue", 42)
# Wait 1/30 to slow the animation to 30 frames per second
graphics.wait(0.033)