A library of classes and helper functions to support game development in Pygame
Project description
PygamePal
A library of classes and functions to support game development in Pygame.
Usage
-
pip install pygamepal
orpip install --upgrade pygamepal
-
Full example, using lots of pygamepal functionality
Contents
Game (create a game with minimal setup) -- Template // Example
# create new game subclass and instance
class MyGame(pygamepal.Game):
# add init(), update() and draw() methods
myGame = MyGame()
myGame.run()
# properties
self.size = (x, y)
self.caption = 'text'
self.icon = pygame.image.load('imageURL')
self.fps = x
self.screen
self.gameTime
self.events
# methods to create in subclass
self.init()
self.update(gameTime)
self.draw()
Input -- Key Example // Mouse Example
# create new instance
input = pygamepal.Input(longPressDuration=60, doublePressTimeout=30)
# update() must be called once per frame
input.update(deltaTime=1)
# key press methods
input.isKeyDown(keycode)
input.isKeyPressed(keycode)
input.isKeyDoublePressed(keycode)
input.isKeyReleased(keycode)
input.getKeyDownDuration(keycode)
input.isKeyLongDown(keycode)
input.isKeyLongPressed(keycode)
input.getKeyLongPressPercentage(keycode)
# mouse button methods
input.isMouseButtonDown(mouseButton)
input.isMouseButtonPressed(mouseButton)
input.isMouseButtonDoublePressed(mouseButton)
input.isMouseButtonReleased(mouseButton)
input.getMouseButtonDownDuration(mouseButton)
input.isMouseButtonLongDown(mouseButton)
input.isMouseButtonLongPressed(mouseButton)
input.getMouseButtonLongPressPercentage(mouseButton)
SpriteImage -- Example // Showcase
# create new instance
spriteImage = pygamepal.spriteImage()
# add one or more sprites, associated with a state
spriteImage.addTextures(firstTexture, *moreTextures, state=None, animationDelay=12, loop=True, hFlip=False, vFlip=False)
# update() must be called once per frame
spriteImage.update()
# draw the current image/animation frame
spriteImage.draw()
# change the current image/animation state
# (does not need to be called for sprite with single state)
spriteImage.setState(state)
# resets the current animation
spriteImage.reset()
spriteImage.pause
Camera -- Example
# creates a new camera instance
camera = pygamepal.Camera(
self, position = (0, 0), size = (640, 480),
target = (0, 0),
# follow delay is a (clamped) value between
# 0 (instant snap to target) and 1 (no movement)
lazyFollow = 0,
# passed value for 'zoom' will be clamped
# between 'minZoom' and 'maxZoom' values
zoom = 1, minZoom = 0.1, maxZoom = 10,
# zoom follow delay is a (clamped) value between
# 0 (instant zoom) and 1 (no zoom)
lazyZoom = 0,
backgroundColour = 'gray30',
borderColour='black', borderThickness = 2,
clamp = False, clampRect = (0, 0, 1000, 1000)
)
# update() must be called once per frame
camera.update(deltaTime=1)
# draws surface to the destinationSurface, using camera attributes
camera.draw(surface, destinationSurface)
Particles -- Example
# creates a new particle emitter
particles = pygamepal.particles(
# emitter attributes
emitterPosition=(0,0), emitterSize=(0,0),
emitterLifetime=100,
emitterVelocity=(0,0), emitterAcceleration=(0,0),
emitterParticleDelay=5,
# particle attributes
particleVelocityMin=(-1,-1), particleVelocityMax=(1,1),
particleAccelerationMin=(0,0), particleAccelerationMax=(0,0),
particleLifetime=100,
particleSize=20,
particleSizeDecay=0.2,
particleColors=None
)
# update() must be called once per frame
particles.update(deltaTime=1)
# call draw() once per frame to draw all particles
particles.draw(surface)
Transitions -- Example // Showcase
Transition types:
- TransitionFade
- TransitionFadeToBlack
- TransitionWipeLeft
- TransitionWipeRight
- TransitionWipeUp
- TransitionWipeDown
- TransitionMoveLeft
- TransitionMoveRight
- TransitionMoveUp
- TransitionMoveDown
Easing functions
- linear
- bounceEaseOut
# creates a new transition instance
transition = pygamepal.TransitionFade(fromSurface=None, toSurface=None, duration=100, easingFunction=linear)
# update() and draw() should be called each game loop frame
transition.update(deltaTime=1)
transition.draw(surface)
# transition properties
transition.duration = x # number of frames (default) / game time in ms
transition.easingFunction = pygampal.bounceEaseOut
Triggers -- Example
# creates a new trigger
# -- onCollide is executed every frame that this trigger collides with another
# -- onEnter is executed once on collision
# -- onExit is executed once when triggers are no longer colliding
# -- these functions should be of the form, e.g.:
# -- def onEnter(thisTrigger, otherTrigger):
# -- [add code here]
trigger = pygamepal.Trigger(x=0, y=0, w=10, h=10, onEnter=None, onCollide=None, onExit=None)
# update() must be called once per frame
trigger.update(deltaTime=1)
# you can call draw() to see triggers
trigger.draw(screen)
Buttons -- Example
# create a new button
button = pygamepal.Button(
# input is not optional
input,
position = (0,0), size = (100,50),
label = None,
fgColor = 'white', bgColor = 'black',
borderWidth = 1,
borderColor = 'white',
image = None,
# this method called when highlighted
onHighlighted = None,
# this method is called when selected
onSelected = None,
# updateMethod and drawMethod give the ability
# to override default button befaviour
updateMethod = None,
drawMethod = None,
# a keycode can also be associated with a button
# (only works if pygamepal.input is specified)
keyCode = None
)
# call update() and draw() each frame
button.update(deltaTime = 1)
button.draw(screen)
# if creating your own update method, you
# may want to use the following methods
# to set the button state
self.setHighlighted()
self.setSelected()
# if creating your own draw method, you
# may want to use the following methods
# to draw the button components
self.drawBackground(screen)
self.drawImage(screen)
self.drawText(screen)
self.drawBorder(screen)
# draws text with minimal required parameters
drawText(screen, text, x, y, font=None, antialias=True, color='white', background=None)
# minimal example:
drawText(screen, 'Hello, world!')
# returns a list of sub-textures from a large spritesheet/texture
# the list has the same dimensions as the original texture, but
# can be flattened using flatten(2dList).
splitTexture(texture, newTextureWidth, newTextureHeight)
# simple example, splitting a single 96x32 spritesheet into 4 separate textures:
textureList = splitTexture(texture, 32, 32)
firstTexture = textureList[0][0] # or firstTexture = flatten(textureList)[0]
# flattens a 2d list into a single list
newList = flatten(2dList)
# see above for example
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pygamepal-0.5.0.tar.gz
.
File metadata
- Download URL: pygamepal-0.5.0.tar.gz
- Upload date:
- Size: 11.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d05ee19a535fb9dd18fca918033a2a1735428ad46f76522dcb6115809da75997 |
|
MD5 | 9659393941fac2d588d1fd535c67fce5 |
|
BLAKE2b-256 | 71ad19c05583b7f974536340556e56d0952747d9301a419c264691d7a86735cc |
File details
Details for the file pygamepal-0.5.0-py3-none-any.whl
.
File metadata
- Download URL: pygamepal-0.5.0-py3-none-any.whl
- Upload date:
- Size: 22.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bc6c3fde32273a1bcd86e7b75e0a78caf1c5f366e9d6d49c9a411b38f4f01e9 |
|
MD5 | 809444631580988927dae88b97462bec |
|
BLAKE2b-256 | f55fa09467f2f4483d2b56d5714f809f4c1c0143c60ee3176e4d90c91234b68c |