Maksymalna prędkość spadania
Część sekcji Światy ścieżki Pygame w Coddy. Lekcja 13 z 35.
Grawitacja cały czas zwiększa prędkość spadania. Jeśli gracz spadnie z wystarczająco dużej wysokości, w jednej klatce pokona 30 lub 40 pikseli. Kafelek ma 36 pikseli wysokości, więc przy takiej prędkości gracz może przelecieć prosto przez platformę między dwiema klatkami, nigdy jej nie dotykając.
Rzeczywiste spadanie również ma prędkość maksymalną. Ogranicz prędkość za pomocą min:
MAX_FALL = 12
# w pętli
vel_y = min(vel_y + GRAVITY, MAX_FALL)min zwraca mniejszą z dwóch liczb, więc prędkość rośnie o 1 w każdej klatce, aż osiągnie 12, a potem pozostaje na tym poziomie. Skok zaczyna się od -15, poniżej limitu, więc skoki się nie zmieniają.
Dwanaście to jedna trzecia wysokości kafelka: niezależnie od tego, na co spadnie gracz, w którejś klatce nastąpi nałożenie się na ten obiekt, a test lądowania może to wykryć.
Wyzwanie
Łatwy- Dodaj
MAX_FALL = 12na górze. - Zastąp
vel_y += GRAVITYprzezvel_y = min(vel_y + GRAVITY, MAX_FALL).
Gracz zaczyna w powietrzu, więc możesz zobaczyć, jak osiąga maksymalną prędkość.
Spróbuj swoich sił
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()
Wszystkie lekcje w sekcji Światy
1Mapy z tekstu
Poziom w tekścieWiersze i kolumnyLitery ze znaczeniemGdzie zaczyna graczJeden ekran naraz3Grawitacja i skakanie
Spadanie pod wpływem grawitacjiSkok z ziemiKrótkie podskokiMaksymalna prędkość spadaniaBufor skokuPoćwicz samodzielnie: Edytor online Pygame