Menu
CoddyTech

التلاشي والتقلّص

جزء من قسم الصوت وإحساس اللعب في رحلة Pygame على Coddy. الدرس 10 من 23.

الشرارة التي تظل كما هي حتى تختفي تبدو كنقطة أُطفئت. تبرد الشرارات الحقيقية: إذ تنكمش ويتغير لونها وهي تخمد. لديك بالفعل الرقم الذي تحتاجه لذلك، وهو life الخاص بالجسيم. احسب الحجم واللون انطلاقًا منه عند الرسم.

يمكن أن يتبع نصف القطر قيمة الحياة مباشرةً:

radius = p["life"] // 10 + 1

عندما يتبقى 40 إطارًا، تكون القيمة 5؛ وعندما يتبقى 9 إطارات أو أقل، تكون 1. يحافظ + 1 على نصف القطر عند 1 أو أكثر: فالدائرة التي نصف قطرها 0 لا ترسم شيئًا، وستختفي الشرارة مبكرًا.

بالنسبة إلى اللون، اختر من بين بضع درجات، من الساخن إلى البارد:

if p["life"] > 25:
    color = (255, 220, 80)
elif p["life"] > 10:
    color = (255, 140, 40)
else:
    color = (180, 50, 40)

اختبر الرقم الأكبر أولًا. إذا كُتبت الشروط بالترتيب العكسي، فسيطابق life > 10 أيضًا قيمة حياة مقدارها 30، ولن يُنفذ فرع اللون الأصفر أبدًا.

challenge icon

التحدي

متوسط

أنشئ بالضغط على مفتاح المسافة حلقة من 8 شرارات، تعيش كل منها 40 إطارًا. اجعلها تخفت أثناء طيرانها:

  1. ارسم كل شرارة بنصف قطر life // 10 + 1.
  2. لوّنها بالأصفر (255, 220, 80) عندما تكون مدة حياتها أكثر من 25، وبالبرتقالي (255, 140, 40) عندما تكون أكثر من 10، وبالأحمر الداكن (180, 50, 40) بعد ذلك.

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ring of Sparks")
clock = pygame.time.Clock()

DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            for vx, vy in DIRECTIONS:
                particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})

    for p in particles:
        p["x"] += p["vx"]
        p["y"] += p["vy"]
        p["life"] -= 1

    screen.fill((20, 20, 36))
    for p in particles:
        if p["life"] > 0:
            pygame.draw.circle(screen, (255, 220, 80), (p["x"], p["y"]), 4)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

جميع دروس الصوت وإحساس اللعب

تدرّب بنفسك: Playground لـ Pygame