دوّر انطلاقًا من الصورة الأصلية
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 9 من 36.
كرة شوكية تدور طوال الوقت تنعطف قليلًا في كل إطار. توجد طريقة مغرية لكتابتها، لكنها تؤدي إلى مشكلة:
ball = pygame.transform.rotate(ball, 2) # خطأفي كل إطار، تُدار الصورة التي دارت في الإطار السابق. وتضيف كل عملية تدوير إطارًا شفافًا، لذا يزداد حجم Surface بنحو 3 بالمئة في كل إطار: فيصبح ضعف حجمه بعد نصف ثانية، ويبلغ عرضه قرابة 1,800 بكسل بعد ثانيتين. كما تصبح البكسلات أكثر تلطيخًا قليلًا مع كل تدويرة. وسرعان ما تتباطأ اللعبة إلى حد الزحف.
احتفظ بالأصل والزاوية بدلًا من ذلك، وأنشئ الصورة المدارة من الأصل في كل إطار:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))الآن تكون spun على بُعد عملية تدوير واحدة من الملف، مهما كانت الزاوية: فلا يتجاوز حجمها أبدًا 67 في 67 بكسل، ولا تصبح أكثر ضبابية من صورة دارت مرة واحدة. وتنطبق القاعدة نفسها على كل تحويل: ابدأ من الأصل، لا من النسخة الأخيرة.
التحدي
متوسط- قبل الحلقة، اجعل
angle = 0. - في كل إطار، أضف 2 إلى
angle. - أدِر
ballالأصلي بمقدارangleوارسم الناتج بحيث يكون مركزه عند(320, 240). لا تغيّرballنفسه أبدًا.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Spinning Spikes")
clock = pygame.time.Clock()
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ball, ball.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame