Menu
CoddyTech

جسيم

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

تتكوّن الشرارات والغبار والدخان والقصاصات الورقية من جسيمات: أشياء صغيرة كثيرة تتطاير، وتبقى مدة قصيرة ثم تختفي. لا يحتاج الجسيم الواحد إلا إلى بضعة أرقام: موضعه، والمسافة التي يتحركها في كل إطار، وعدد الإطارات المتبقية من عمره. يحتفظ بها قاموس:

{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}

يمثّل vx وvy سرعته: بكسلان إلى اليمين و3 بكسلات إلى الأعلى في كل إطار. احتفظ بكل جسيم في قائمة واحدة، وفي كل إطار حرّكها كلها وأنقص إطارًا واحدًا من عمر كل منها:

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

ارسم كل جسيم ما دام عمره أكبر من 0، على هيئة دائرة صغيرة:

for p in particles:
    if p["life"] > 0:
        pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)

ليس للجسيم صورة ولا صنف. وهو قليل الكلفة، لذا يمكن أن تحتوي اللعبة على مئات الجسيمات في الوقت نفسه.

challenge icon

التحدي

سهل

اجعل الباعث الرمادي في المنتصف يطلق شرارة:

  1. عند الضغط على Space، أضف {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} إلى particles.
  2. في كل إطار، حرّك كل جسيم بمقدار vx وvy الخاصين به، وأنقص life بمقدار 1.
  3. ارسم كل جسيم تكون مدة حياته أكبر من 0 على شكل دائرة برتقالية (255, 160, 60) نصف قطرها 3.

جرّب بنفسك

import pygame

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

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((30, 30, 46))
    pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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