القفز
جزء من قسم قواعد اللعبة في رحلة Pygame على Coddy. الدرس 24 من 29.
القفزة سرعةٌ إلى الأعلى تسلبها الجاذبية. أعطِ العداء سرعة رأسية، vy. في كل إطار، تضيف الجاذبية 1 إليها ويتحرك العداء بمقدارها:
def update(self):
self.vy += GRAVITY
self.rect.y += self.vy
if self.rect.bottom >= GROUND_Y:
self.rect.bottom = GROUND_Y
self.vy = 0تزداد قيمة y نحو الأسفل، لذا تضبط القفزة vy = -16: يرتفع العداء 15 بكسلًا، ثم 14، ثم 13، ويتباطأ حتى يتوقف على ارتفاع نحو 120 بكسلًا، ثم يسقط بسرعة متزايدة. عندما يصل إلى خط الأرض، يوضع عليه ويتوقف.
لا تقفز إلا من الأرض. من دون هذا الاختبار، ستبدأ كل ضغطة أثناء وجود العداء في الهواء قفزة جديدة، وقد يواصل العداء التسلق إلى ما لا نهاية:
def jump(self):
if self.rect.bottom == GROUND_Y:
self.vy = -16يبني القسم 5 على هذا بإضافة منصات للهبوط عليها.
التحدي
متوسط- أضِف
GRAVITY = 1وself.vy = 0إلى العَدّاء. - اكتب
update()كما هو موضّح، واستدعِrunner.update()في كل إطار، قبل الرسم. - اكتب
jump():vy = -16، فقط عندما يكون العَدّاء على الأرض. - يؤدي الضغط على مفتاح المسافة أو السهم لأعلى إلى استدعاء
runner.jump().
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("Sky Runner")
clock = pygame.time.Clock()
SKY = (140, 200, 240)
GROUND = (90, 160, 80)
GROUND_Y = 260
class Runner(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("assets/images/player.png").convert_alpha()
self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))
runner = Runner()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(SKY)
pygame.draw.rect(screen, GROUND, (0, GROUND_Y, 640, 60))
screen.blit(runner.image, runner.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس قواعد اللعبة
تدرّب بنفسك: Playground لـ Pygame