كتلة ساقطة
الدرس 10 من 41 في دورة اصنع ألعابًا باستخدام Pygame على Coddy.
كل ما يسقط هو شيء تزداد قيمة y الخاصة به في كل إطار. اجعل الكتلة أيضًا من النوع Rect، وأضف قيمة إلى y الخاصة بها في كل تكرار للحلقة:
block = pygame.Rect(220, 0, 20, 20)
while running:
# الأحداث والمفاتيح
block.y += 3
# املأ، ارسمعند 60 إطارًا في الثانية، تعادل 3 بكسلات في الإطار 180 بكسلًا في الثانية. ارتفاع النافذة 360 بكسلًا، لذا تستغرق الكتلة ثانيتين لتصل إلى الأسفل.
تتحرك هذه اللعبة بحسب الإطار، كما في Move a Square، وليس بحسب dt. لا يحتفظ Rect إلا بأعداد صحيحة، لذا فإن خطوة مثل 0.6 بكسل ستُقرب إلى 0، ولن يتحرك Rect أبدًا. تحتفظ الألعاب التي تحرك Rects بحسب الوقت بالموضع في Vector2 وتنسخه إلى Rect.
تستمر الكتلة في السقوط بعد خروجها من النافذة. لا شيء يوقفها بعد؛ يعيدها الدرس التالي.
التحدي
سهلأسقِط كتلة من الأعلى.
- أسفل السلة، اكتب
block = pygame.Rect(220, 0, 20, 20). - في الحلقة، بعد تحرّك السلة، أضف 3 إلى
block.y. - ارسم الكتلة باللون الأحمر
(235, 80, 80)بعد السلة.
اضغط على «العب»: تسقط كتلة حمراء من الأعلى. ثم اضغط على «تحقق».
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
basket = pygame.Rect(200, 330, 80, 16)
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]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس اصنع ألعابًا باستخدام Pygame
تدرّب بنفسك: Playground لـ Pygame