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