قصّ ورقة الرسوم المتحركة
جزء من قسم الكائنات والصور في رحلة 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. تحتفظ رسومات البكسل بحوافها الحادة عند تكبيرها بعدد صحيح. اقتطع الإطارات وكبّرها مرة واحدة قبل بدء الحلقة، واحتفظ بها في قائمة: ستختار الدروس التالية إطارًا حسب فهرسه.
التحدي
متوسط- قبل الحلقة، أنشئ
frames: الإطارين في العمودين 0 و1 من الصف العلوي، أبعاد كل منهما 24 × 24، ثم كبّرهما بمعامل 3. - بدلًا من ورقة الصور بأكملها، ارسم
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()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame