Meet Pygame Noah Kantrowitz June 8, 2007
The Basics • Cross-platform • Based on SDL (don’t quote me on that) • Handle input (keyboard, mouse) and output (graphics, audio)
Starting Up • import pygame • pygame.init() • Cue music ...
The Screen • • • •
screen = pygame.display.set_mode((x, y)) screen = pygame.display.get_surface() pygame.display.flip() pygame.display.update(dirty)
Surfaces • The basic element of graphics • pygame.image.load(file) •
.convert_alpha()
vs .set_colorkey((r,g,b))
• dest.blit(src,
(x, y))
Formats • Native support for the following: JPEG TGA
PNG TIF
GIF LBM
BMP PBM
• SVG will need to worked out • Stay tuned ...
PCX XPM
The Loop while True:
<event handling>
The Loop while True: <event handling>
Timing • from pygame.time import • clock = Clock() • delta = clock.tick(30)
Clock
The Loop while True: <event handling>
Event Handling for evt in pygame.event.get(): if evt.type == pygame.QUIT: sys.exit() ...
Event Handling • Other types: QUIT
KEYUP
KEYDOWN
MOUSEMOTION
MOUSEBUTTONUP
MOUSEBUTTONDOWN
Key Events • evt.key == pygame.K_a • See the Pygame documentation for the full list of key constants.
Mouse Events
• evt.pos • evt.button
(for the button events)
The Loop while True: <event handling>
Sprites • pygame.sprite.Sprite • class Foo(Sprite): • Must call superclass __init__() • .image, .rect
Groups • pygame.sprite.Group • RenderUpdates, OrderedUpdates • .add(), .remove() • .update(*args) • More on these in a moment
The Loop while True: <event handling>
Drawing • .draw(dest) • Dirty updates • pygame.draw.update(dirty)
Rects •
pygame.Rect(left,top,width,height)
• surf.get_rect() Always at (0,0) • Attributes: top
bottom
left
right
topleft
bottomleft
topright
bottomright
midtop
midbottom
midleft
midright
center
centerx
centery
size
width
height
Collisions • Rect-based
• spritecollide(sprite,group,kill) • spritecollideany(sprite,group)
• groupcollide(group1,group2,kill1,kill2)
Sound • pygame.mixer.Sound(file) • .play(), .stop() • pygame.mixer.music
Text
• Try to avoid it for now.
More?
• http://www.pygame.org/docs • Email me. ([email protected])