Saltare da terra
Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 11 di 35.
Un salto è una velocità negativa. Imposta vel_y = -15 e il giocatore si sposta verso l’alto di 15 pixel; la gravità sottrae 1 a ogni fotogramma finché il giocatore non ricade. Questo crea l’arco.
Un salto dovrebbe iniziare solo da terra. Mantieni un flag che indica se il giocatore si trovava sul pavimento in questo fotogramma:
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = TrueUsa l’evento KEYDOWN per il salto, così una pressione corrisponde a un salto, indipendentemente dal fatto che il tasto sia tenuto premuto o meno:
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMPevent.key in (pygame.K_SPACE, pygame.K_UP) è True per entrambi i tasti. In aria, on_ground è False, quindi una seconda pressione non ha effetto.
Sfida
Medio- Aggiungi
JUMP = -15in alto eon_ground = Falseprima del ciclo di gioco. - A ogni fotogramma, imposta
on_ground = Falseprima del controllo del pavimento eon_ground = Trueal suo interno. - Alla pressione di Spazio o Freccia su, con un evento
KEYDOWN, quandoon_groundè True, impostavel_y = JUMP.
Provalo tu
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Gravity")
clock = pygame.time.Clock()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()
grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
player_img = pygame.image.load("assets/images/player.png").convert_alpha()
player = player_img.get_rect(topleft=(264, 40))
vel_y = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
for y in range(0, 360, 72):
for x in range(0, 576, 72):
screen.blit(background, (x, y))
for x in range(0, 576, TILE):
screen.blit(grass_img, (x, FLOOR))
screen.blit(player_img, player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Mondi
1Mappe dal testo
Un livello in testoRighe e colonneLettere con significatoDove inizia il giocatoreUna schermata alla volta4Collisioni con le piattaforme
Muri a sinistra e a destraAtterrare sulle piattaformeBattere la testaCadere fuori dal livelloUn asse alla volta5Una telecamera a scorrimento
Un offset della telecameraSegui il giocatoreMantieni la telecamera all'internoParallasse3Gravità e salto
Cadere con la gravitàSaltare da terraSaltelli breviUna velocità massima di cadutaBuffer del saltoEsercitati da solo: Playground Pygame