self هو الكائن
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 12 من 36.
يمكن لصنف واحد إنشاء أي عدد تريده من الكائنات، ويحتفظ كلٌّ منها بسماته الخاصة. أضف إلى __init__ معاملًا للسرعة، وهكذا يمكن لنجمتين أن تسقطا بسرعتين مختلفتين:
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)عندما تكتب slow.update()، تشغّل Python Star.update(slow): تكون self هي slow، لذا تحرّك self.y += self.speed الكائن slow بمقدار 1. أما fast.update() فتشغّل الأسطر نفسها مع تعيين self إلى fast، وتحركه بمقدار 3. طريقة واحدة، وكائنان، ولا يغيّر أيٌّ منهما أرقام الآخر.
لهذا السبب، يجب أن تسبق self. كل قيمة يملكها كائن. فالاسم الذي لا تسبقه، مثل speed، هو متغير محلي عادي للطريقة، ويختفي عند انتهائها.
التحدي
سهل- امنح
__init__وسيطًا ثالثًا هوspeed، وخزّنه فيself.speed. - استبدل
starبنجمتين:slow = Star(200, 0, 1)وfast = Star(440, 0, 3). - حدّث النجمتين وارسمهما في كل إطار.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Star")
clock = pygame.time.Clock()
class Star:
def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 2
def update(self):
self.y += self.speed
if self.y > 480:
self.y = 0
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)
star = Star(320, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
star.update()
screen.fill((20, 22, 40))
star.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame