Una velocità massima di caduta
Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 13 di 35.
La gravità continua ad aumentare la velocità di caduta. Se cadi da un'altezza sufficiente, il personaggio si sposta di 30 o 40 pixel in un singolo fotogramma. Una tessera è alta 36 pixel, quindi a quella velocità il personaggio può attraversare una piattaforma tra due fotogrammi senza mai sovrapporsi a essa.
Anche le cadute reali hanno una velocità massima. Limita la velocità con min:
MAX_FALL = 12
# nel ciclo
vel_y = min(vel_y + GRAVITY, MAX_FALL)min restituisce il minore dei suoi due numeri, quindi la velocità aumenta di 1 a ogni fotogramma fino a raggiungere 12, per poi restare costante. Un salto inizia a -15, al di sotto del limite, quindi i salti non cambiano.
Dodici è un terzo di una tessera: qualunque cosa su cui cada il personaggio, in un fotogramma si sovrapporrà a essa e il controllo dell'atterraggio potrà rilevarlo.
Sfida
Facile- Aggiungi
MAX_FALL = 12in cima. - Sostituisci
vel_y += GRAVITYconvel_y = min(vel_y + GRAVITY, MAX_FALL).
Il giocatore inizia in aria, così puoi vederlo raggiungere la velocità massima.
Provalo tu
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
JUMP = -15
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Falling Speed")
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
on_ground = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMP
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4
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
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = True
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