Menu
CoddyTech

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.

challenge icon

Sfida

Facile
  1. Aggiungi MAX_FALL = 12 in cima.
  2. Sostituisci vel_y += GRAVITY con vel_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

Esercitati da solo: Playground Pygame