قفزات قصيرة
جزء من قسم العوالم في رحلة Pygame على Coddy. الدرس 12 من 35.
في معظم ألعاب المنصات، تؤدي الضغطة السريعة إلى قفزة صغيرة، بينما تؤدي الضغطة المطوّلة إلى قفزة كاملة. وهذا يتيح للاعب اختيار ارتفاع كل قفزة.
عند تحرير مفتاح القفز، يصل حدث KEYUP. إذا كان اللاعب لا يزال يصعد بسرعة، فأبطئ صعوده:
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4لا يرسل المفتاح المضغوط باستمرار حدث KEYUP أثناء الصعود، لذا تصل القفزة إلى أقصى ارتفاع لها. أما الضغطة السريعة فترسل هذا الحدث بعد إطار واحد، فتنخفض السرعة إلى -4، ثم تجعل الجاذبية اللاعب ينعكس اتجاهه بعد بضعة إطارات.
الشرط vel_y < -4 مهم. بالقرب من القمة أو أثناء السقوط، تكون قيمة vel_y أكبر من -4، وسيؤدي ضبطها على -4 في هذه الحالة إلى دفع اللاعب إلى الأعلى مجددًا.
التحدي
سهل- عند رفع مفتاح المسافة أو السهم لأعلى، عندما تكون
vel_yأقل من -4، عيّنvel_y = -4. - اترك قفزة
KEYDOWNكما هي.
جرّب بنفسك
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس العوالم
تدرّب بنفسك: Playground لـ Pygame