Menu
CoddyTech

Saltelli brevi

Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 12 di 35.

Nella maggior parte dei platform, un tocco rapido dà un piccolo balzo e una pressione prolungata produce un salto completo. Questo permette al giocatore di scegliere l'altezza di ogni salto.

Quando il tasto del salto viene rilasciato, arriva un evento KEYUP. Se il giocatore sta ancora salendo velocemente, rallenta la salita:

elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
    if vel_y < -4:
        vel_y = -4

Un tasto tenuto premuto non invia mai KEYUP durante la salita, quindi il salto raggiunge la sua altezza massima. Un tocco lo invia un fotogramma dopo, la velocità scende a -4 e la gravità fa invertire la direzione al giocatore dopo pochi fotogrammi.

Il controllo vel_y < -4 è importante. Vicino al punto più alto, o mentre sta cadendo, vel_y è superiore a -4 e impostarlo a -4 in quel punto spingerebbe il giocatore di nuovo verso l'alto.

challenge icon

Sfida

Facile
  1. Quando si verifica un KEYUP della barra spaziatrice o della freccia su, se vel_y è minore di -4, imposta vel_y = -4.
  2. Lascia invariato il salto con KEYDOWN.

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("Short Hops")
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

    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()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Mondi

Esercitati da solo: Playground Pygame