Yerden Zıplama
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 11 / 35.
Bir sıçrama, negatif hızdır. vel_y = -15 olarak ayarlarsan oyuncu 15 piksel yukarı çıkar; yer çekimi, oyuncu yeniden düşene kadar her karede 1 çıkarır. Böylece sıçrama yayı oluşur.
Bir sıçrama yalnızca yerdeyken başlamalıdır. Oyuncunun bu karede zeminde olup olmadığını belirten bir bayrak tut:
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = TrueSıçrama için KEYDOWN olayını kullan; böylece tuş basılı tutulsa da tutulmasa da tek basış tek sıçrama yapar:
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMPevent.key in (pygame.K_SPACE, pygame.K_UP) ifadesi iki tuştan herhangi biri için True olur. Havada on_ground False olduğundan ikinci basış hiçbir şey yapmaz.
Görev
Orta- En üste
JUMP = -15ve oyun döngüsünden önceon_ground = Falseekle. - Her karede, zemin denetiminden önce
on_ground = False, denetimin içinde iseon_ground = Trueayarla. - Boşluk veya Yukarı tuşuna basıldığında oluşan bir
KEYDOWNolayında,on_grounddeğeri True isevel_y = JUMPayarla.
Kendin dene
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Gravity")
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
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
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
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
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