الدوال
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 11 من 36.
أصبحت أرقام النجمة محفوظة في الصنف الآن، لكن القواعد الخاصة بها، مثل كيفية سقوطها وكيفية رسمها، ما زالت ضمن الحلقة. تُسمى الدوال المكتوبة داخل الصنف طرائق، وهي تضع القواعد بجوار البيانات:
class Star:
# __init__ كما كان من قبل
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)المعامل الأول لكل طريقة هو self، أي الكائن الذي تعمل عليه. تستدعي طريقةً على كائن باستخدام نقطة، ويُمرَّر Surface الخاص بـ pygame مثل أي وسيط آخر:
star.update()
star.draw(screen)تُقرأ الحلقة الرئيسية الآن على أنها ما يحدث في الإطار: حدِّث النجمة، ثم ارسمها. تكاد كائنات الألعاب في برامج pygame تمتلك دائمًا هاتين الطريقتين، update وdraw.
التحدي
متوسط- أضف طريقة
update(self)إلىStar: فهي تضيفself.speedإلىself.yوتعيد النجمة إلىy = 0عندما تتجاوز قيمةself.y480. - أضف
draw(self, screen): لرسم الدائرة البيضاء ذات نصف القطر 4 عند(self.x, self.y). - في الحلقة، استدعِ
star.update()، وبعد التعبئة، استدعِstar.draw(screen).
جرّب بنفسك
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
star = Star(320, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
star.y += star.speed
if star.y > 480:
star.y = 0
screen.fill((20, 22, 40))
pygame.draw.circle(screen, (255, 255, 255), (star.x, star.y), 4)
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame