البكسلات الشفافة
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 5 من 36.
ملف الصورة مستطيل دائمًا، لكن سفينة العدو ليست كذلك. وحدات البكسل المحيطة بها شفافة: لكل بكسل في PNG رقم رابع هو قيمة ألفا، وتتراوح من 0 (شفاف تمامًا) إلى 255 (معتم تمامًا).
يحمّل الكود الأولي الأعداء الثلاثة باستخدام convert()، التي تتخلص من قيمة ألفا: فتتحول كل وحدة بكسل شفافة إلى اللون الأسود، وتظهر كل سفينة عدو داخل مربع أسود. تحافظ convert_alpha() على قيمة ألفا، لذا لا تغطي النافذة إلا وحدات البكسل المعتمة. استخدمها مع أي شيء ليس مستطيلًا معتمًا.
يظل Rect هو المستطيل بأكمله. ارسم حدوده لترى المساحة التي تشغلها الصورة:
rect = red.get_rect(topleft=(128, 200))
screen.blit(red, rect)
pygame.draw.rect(screen, (90, 90, 120), rect, 1)يرسم الرقم الأخير، 1، حدًا بعرض بكسل واحد بدلًا من ملء Rect. انظر إلى الفراغات بين الحدود والسفينة. قد يتداخل مستطيلان من دون أن تتلامس الصورتان داخلهما، ومع ذلك سيُظهر اختبار التصادم باستخدام Rects أنهما اصطدما. يعالج الفصل 5 ذلك.
التحدي
سهل- حمّل الأعداء الثلاثة باستخدام
.convert_alpha()بدلًا من.convert()، لكي تختفي المربعات السوداء. - بعد كل عدو، ارسم إطارًا حول مستطيله باللون
(90, 90, 120)وبعرض بكسل واحد. تبقى الأعداء عند(128, 200)و(288, 200)و(448, 200).
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Three Enemies")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert()
green = pygame.image.load("assets/images/enemy_green.png").convert()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(red, (128, 200))
screen.blit(green, (288, 200))
screen.blit(yellow, (448, 200))
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame