Reading about Python? Actually practice it. Try PyChallenge free

Python Tutorial

Jump and run in Pygame

In this article you will learn how to implement jump and run logic in Pygame. To do so, we will implement the player logic.

You may like Practice Python with interactive exercises

Movement Moving left and right is similar to the previous tutorial and simply mean changing the (x,y) position of the player. For jumping, we use a formula from classical mechanics:

F = 1/2 * m * v^2

Where F is the force up/down,  m is the mass of your object and v is the velocity. The velocity goes down over time because when the player jumps the velocity will not increase more in this simulation.   If the player reaches the ground, the jump ends. In Python, we set a variable isjump to indicate if the player is jumping or not. If the player is, its position will be updated according to the above formula.

Full Code:

from pygame.locals import *
import pygame
import math
from time import sleep
 
class Player:
    x = 10
    y = 500
    speed = 10

# Stores if player is jumping or not. isjump = 0 # Force (v) up and mass m. v = 8 m = 2 def moveRight(self): self.x = self.x + self.speed def moveLeft(self): self.x = self.x - self.speed def jump(self): self.isjump = 1

def update(self): if self.isjump: # Calculate force (F). F = 0.5 * mass * velocity^2. if self.v > 0: F = ( 0.5 * self.m * (self.v*self.v) ) else: F = -( 0.5 * self.m * (self.v*self.v) ) # Change position self.y = self.y - F

# Change velocity self.v = self.v - 1

# If ground is reached, reset variables. if self.y >= 500: self.y = 500 self.isjump = 0 self.v = 8

class App: windowWidth = 800 windowHeight = 600 player = 0 def __init__(self): self._running = True self._display_surf = None self._image_surf = None self.player = Player() def on_init(self): pygame.init() self._display_surf = pygame.display.set_mode((self.windowWidth,self.windowHeight), pygame.HWSURFACE) pygame.display.set_caption('Pygame pythonspot.com example') self._running = True self._image_surf = pygame.image.load("pygame.png").convert() def on_event(self, event): if event.type == QUIT: self._running = False def on_loop(self): pass def on_render(self): self._display_surf.fill((0,0,0)) self._display_surf.blit(self._image_surf,(self.player.x,self.player.y)) self.player.update() pygame.display.flip() sleep(0.03) def on_cleanup(self): pygame.quit() def on_execute(self): if self.on_init() == False: self._running = False while( self._running ): pygame.event.pump() keys = pygame.key.get_pressed() if (keys[K_RIGHT]): self.player.moveRight() if (keys[K_LEFT]): self.player.moveLeft() if (keys[K_UP]): self.player.jump() if (keys[K_ESCAPE]): self._running = False self.on_loop() self.on_render() self.on_cleanup() if __name__ == "__main__" : theApp = App() theApp.on_execute()

If you want to jump on objects, simply add them to the screen, do collision detection and reset the jump variables if collision is true.
Next