En Yüksek Düşme Hızı
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 13 / 35.
Yerçekimi düşme hızını artırmaya devam eder. Yeterince yüksekten düşürürsen oyuncu tek karede 30 ya da 40 piksel hareket eder. Bir karo 36 piksel yüksekliğindedir, bu yüzden bu hızda oyuncu iki kare arasında bir platformun içinden geçebilir ve platformla hiç üst üste gelmeyebilir.
Gerçek düşüşlerin de bir azami hızı vardır. Hızı min ile sınırla:
MAX_FALL = 12
# döngünün içinde
vel_y = min(vel_y + GRAVITY, MAX_FALL)min, iki sayısından küçük olanı verir; bu yüzden hız, 12'ye ulaşana kadar her karede 1 artar ve sonra bu değerde kalır. Bir zıplama -15'te, sınırın altında başlar; dolayısıyla zıplamalar değişmez.
On iki, bir karonun üçte biridir: oyuncu neyin üzerine düşerse düşsün, bir karede onunla üst üste gelir ve iniş kontrolü bunu yakalayabilir.
Görev
Kolay- Üste
MAX_FALL = 12ekle. vel_y += GRAVITYifadesinivel_y = min(vel_y + GRAVITY, MAX_FALL)ile değiştir.
Oyuncu havada başlar, böylece en yüksek hıza ulaştığını görebilirsin.
Kendin dene
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()
Dünyalar bölümündeki tüm dersler
1Metinden Haritalar
Metinde Bir SeviyeSatırlar ve SütunlarAnlam Taşıyan HarflerOyuncunun Başladığı YerHer Seferinde Bir Ekran3Yerçekimi ve Zıplama
Yerçekimiyle DüşmeYerden ZıplamaKısa SıçrayışlarEn Yüksek Düşme HızıZıplama Tamponu6Devriye Gezen Düşmanlar
Devriye Gezen Bir BlobÜzerine Bas ya da Darbe AlYürüme DöngüsüHaritadaki DüşmanlarKendi başına pratik yap: Pygame playground