Menu
CoddyTech

دفقة من الجسيمات

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

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

for i in range(20):
    particles.append({
        "x": x,
        "y": y,
        "vx": random.uniform(-3, 3),
        "vy": random.uniform(-3, 3),
        "life": random.randint(20, 40),
    })

random.uniform(-3, 3) هو عدد عشري عشوائي من -3 إلى 3، لذا يمكن للجسيم أن يتحرك في أي اتجاه، ببطء أو بسرعة. أما randint فسيعطي أعدادًا صحيحة فقط، وسينطلق الانفجار في بضعة خطوط مستقيمة.

يجب أن تكون استدعاءات الدوال العشوائية داخل الحلقة. اختر vx مرة واحدة قبلها، وستحصل الجسيمات العشرون كلها على السرعة نفسها: ستتحرك معًا كنقطة واحدة.

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

النقر بالماوس هو حدث pygame.MOUSEBUTTONDOWN، وevent.pos هي النقطة التي تم النقر عليها.

challenge icon

التحدي

متوسط

تُنشئ النقرة جسيمًا واحدًا يرتفع. حوّل ذلك إلى انفجار:

  1. عند النقر، أضف 20 جسيمًا إلى النقطة التي تم النقر عليها.
  2. امنح كل جسيم vx وvy من random.uniform(-3, 3)، وlife من random.randint(20, 40).

جرّب بنفسك

import random
import pygame

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

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})

    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, 160, 60), (p["x"], p["y"]), 3)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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

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