Kısa Sıçrayışlar
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 12 / 35.
Çoğu platform oyununda tuşa kısa süre basmak küçük bir sıçrama, uzun süre basmak ise tam bir zıplama sağlar. Böylece oyuncu her zıplamanın yüksekliğini seçebilir.
Zıplama tuşu bırakıldığında bir KEYUP olayı gerçekleşir. Oyuncu hâlâ hızla yükseliyorsa yükselişini yavaşlat:
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4Tuş basılı tutulursa yükseliş sırasında hiçbir zaman KEYUP gönderilmez; bu yüzden zıplama tam yüksekliğine ulaşır. Tuşa kısa süre basmak bu olayı bir kare sonra gönderir, hız -4'e düşer ve yer çekimi birkaç kare sonra oyuncunun yönünü değiştirir.
vel_y < -4 testi önemlidir. Tepeye yakınken veya düşerken vel_y -4'ün üzerindedir ve bu durumda onu -4'e ayarlamak oyuncuyu yeniden yukarı iter.
Görev
Kolay- Boşluk veya Yukarı tuşu bırakıldığında (
KEYUP),vel_y-4'ten küçüksevel_y = -4olarak ayarlayın. KEYDOWNsıçramasını olduğu gibi bırakın.
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("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()
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