كائنات مع صور
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 14 من 36.
الأعداء صور تتحرك على كائنات Rect، والشيفرة الابتدائية تحتفظ بثلاثة كائنات Rect وثلاث عمليات blit يدويًا. يمكن للصنف أن يجمع الصورة وكائن Rect الخاص بها:
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)تُمرَّر الصورة إلى الصنف، ولا تُحمَّل في __init__. حمّل كل ملف مرة واحدة في الأعلى، ومرّر كائن Surface نفسه إلى كل عدو يستخدمه: عشرة أعداء حمر يتشاركون صورة حمراء واحدة. لكن يحصل كل عدو على كائن Rect خاص به، لذا يتحرك كل منهم بمفرده.
تحريك العدو يعني تحريك كائن Rect الخاص به، ورسمه يعني تنفيذ blit لصورته عند موضع كائن Rect: هاتان هما السمتان اللتان يمتلكهما كل كائن لعبة في هذا القسم.
التحدي
متوسط- اكتب الصنف
Enemyباستخدام__init__(self, image, x, y)وupdate(self)وdraw(self, screen)، كما سبق: يكون Rect متمركزًا عند (x, y)، ويتحرك إلى الأسفل بمقدار 2 بكسل في كل إطار، ثم يعود إلى أعلى الحافة العلوية عندما يصبح أسفل النافذة. - أنشئ
enemies، وهي قائمة تضم ثلاثة أعداء: الأحمر متمركز عند (160, 100)، والأخضر عند (320, 100)، والأصفر عند (480, 100). - حدّث وارسم كل عدو في القائمة؛ وأزل كائنات Rect الثلاثة.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
red_rect = red.get_rect(center=(160, 100))
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for rect in (red_rect, green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
screen.blit(red, red_rect)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame