صنف Sprite
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 16 من 36.
كان لكل كائن في اللعبة حتى الآن صورة ومستطيل Rect ودالة update وطريقة لرسمه. لدى pygame فئة مُصمَّمة لهذا الغرض تحديدًا: pygame.sprite.Sprite. تصبح كائنات لعبتك فئات فرعية منها:
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6ثلاث قواعد. استدعِ super().__init__() أولًا: فهي تهيّئ ما تحتاج إليه فئة Sprite داخليًا. سمِّ الصورة self.image والموضع self.rect بالضبط: فكود pygame نفسه يقرأ هذين الاسمين. ضع قواعد كل إطار في update.
تُحمَّل صورة السفينة مرة واحدة في الأعلى باسم ship_image، وتستخدمها الفئة. في الوقت الحالي، ارسم الكائن باستخدام blit: screen.blit(player.image, player.rect). يتيح لك الدرس التالي أن ترسمها pygame.
التحدي
متوسط- اكتب
class Player(pygame.sprite.Sprite)كما في الأعلى: تكونself.imageهيship_image، ويكون منتصف الحافة السفلية لـself.rectعند(320, 470). - تحرّك الدالة
updateالمستطيل 6 بكسلات إلى اليسار أو اليمين باستخدام مفاتيح الأسهم، وتقيّده بحدود النافذة: انقل أسطر الحلّ المبدئي إليها. - أنشئ
player = Player()، واستدعِplayer.update()في كل إطار، وارسمplayer.imageعندplayer.rectباستخدام blit.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))
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]:
ship_rect.x -= 6
if keys[pygame.K_RIGHT]:
ship_rect.x += 6
ship_rect.clamp_ip(screen.get_rect())
screen.fill((20, 22, 40))
screen.blit(ship_image, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame