Yerçekimiyle Düşme
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 10 / 35.
Penceredeki kahraman, bir asansör gibi, kare başına sabit 4 piksel düşüyor. Gerçek cisimler düşerken hızlanır. Oyuncunun dikey hızını bir değişkende tut ve bunu her karede artır:
vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0vel_y, kare başına piksel cinsinden hızdır; pozitif değer aşağı yönü belirtir. GRAVITY = 1, bu değeri her karede bir artırır; böylece oyuncu sırasıyla 1, sonra 2, sonra 3 piksel düşer ve bu şekilde devam eder.
Buradaki zemin, çimlerin üst kenarındaki FLOOR = 324 çizgisidir. Oyuncu bu çizgiyi geçtiğinde alt kenarını çizgiye getir ve düşüşü durdur. Sonraki bölüm bu çizginin yerine gerçek platformlar koyacak.
Oyuncu, görselin Rect nesnesidir: player_img.get_rect(topleft=(264, 40)) bu noktada 48'e 48 boyutlarında bir Rect oluşturur ve screen.blit(player_img, player) görseli oraya çizer.
Görev
Kolay- Üste
GRAVITY = 1ve oyun döngüsünden öncevel_y = 0ekle. - Her karede,
GRAVITYdeğerinivel_ydeğişkenine ekle, ardındanplayer.ydeğerinevel_yekle;player.y += 4yerine bunu yap. player.bottomdeğeriFLOORdeğerini geçtiğinde,player.bottom = FLOORvevel_y = 0olarak ayarla.
Kendin dene
import pygame
TILE = 36
FLOOR = 324
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))
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
player.y += 4
if player.bottom > FLOOR:
player.bottom = FLOOR
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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