Menu
CoddyTech

قصّ ورقة الرسوم المتحركة

جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 25 من 36.

الرسوم المتحركة هي بضع صور تُعرض واحدة تلو الأخرى. غالبًا ما تحفظ الألعاب هذه الصور في ملف واحد، يُسمى ورقة الصور المتحركة: شبكة من إطارات صغيرة متراصة جنبًا إلى جنب. يعرض البرنامج المبدئي الصورة assets/sheets/platformer_characters.png كاملةً، وهي تضم 9 إطارات عرضًا و3 إطارات طولًا، أبعاد كل منها 24 × 24 بكسل. ووضعيتا المشي للشخصية الخضراء هما أول إطارين في الصف العلوي.

تعطيك sheet.subsurface(rect) الجزء الموجود داخل Rect من ورقة الصور، على هيئة Surface مستقلة، دون نسخ أي بكسل. يبدأ رقم الإطار col في الصف row عند (col * 24, row * 24):

frames = []
for col in (0, 1):
    frame = sheet.subsurface((col * 24, 0, 24, 24))
    frames.append(pygame.transform.scale_by(frame, 3))

حجم 24 بكسل صغير جدًا في نافذة أبعادها 640 × 480، لذا يُكبَّر كل إطار بمقدار 3 ليصبح 72 × 72. تحتفظ رسومات البكسل بحوافها الحادة عند تكبيرها بعدد صحيح. اقتطع الإطارات وكبّرها مرة واحدة قبل بدء الحلقة، واحتفظ بها في قائمة: ستختار الدروس التالية إطارًا حسب فهرسه.

challenge icon

التحدي

متوسط
  1. قبل الحلقة، أنشئ frames: الإطارين في العمودين 0 و1 من الصف العلوي، أبعاد كل منهما 24 × 24، ثم كبّرهما بمعامل 3.
  2. بدلًا من ورقة الصور بأكملها، ارسم frames[0] عند (200, 200) وframes[1] عند (368, 200).

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Sheet")
clock = pygame.time.Clock()

sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 22, 40))
    screen.blit(sheet, (212, 204))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

جميع دروس الكائنات والصور

تدرّب بنفسك: Playground لـ Pygame