Menu
CoddyTech

صنف 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.

challenge icon

التحدي

متوسط
  1. اكتب class Player(pygame.sprite.Sprite) كما في الأعلى: تكون self.image هي ship_image، ويكون منتصف الحافة السفلية لـ self.rect عند (320, 470).
  2. تحرّك الدالة update المستطيل 6 بكسلات إلى اليسار أو اليمين باستخدام مفاتيح الأسهم، وتقيّده بحدود النافذة: انقل أسطر الحلّ المبدئي إليها.
  3. أنشئ 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()

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

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