التلاشي والتقلّص
جزء من قسم الصوت وإحساس اللعب في رحلة 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، ولن يُنفذ فرع اللون الأصفر أبدًا.
التحدي
متوسطأنشئ بالضغط على مفتاح المسافة حلقة من 8 شرارات، تعيش كل منها 40 إطارًا. اجعلها تخفت أثناء طيرانها:
- ارسم كل شرارة بنصف قطر
life // 10 + 1. - لوّنها بالأصفر
(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