الظهور عند الالتقاط
جزء من قسم الصوت وإحساس اللعب في رحلة Pygame على Coddy. الدرس 18 من 23.
عندما تجمع جوهرة، تزداد النقاط بمقدار واحد، لكن عينك تكون على الجوهرة، لا على الزاوية. تجذب النبضة القصيرة العين إلى العداد: تقفز الأيقونة إلى حجم أكبر، ثم تتقلص عائدةً إلى حجمها.
احتفظ بمقياس، بقيمة 1.0 للحجم الطبيعي. عند التقاط جوهرة، اضبطه على 1.6؛ وفي كل إطار، أعده تدريجيًا نحو 1 باستخدام السطر نفسه كما من قبل:
pop = 1.6 # عند جمع جوهرة
pop += (1 - pop) * 0.2 # في كل إطارعند الرسم، يحدد المقياس الحجم. أنشئ Rect بذلك الحجم، ثم ضع مركزه في موضعه، لكي تكبر الأيقونة حول منتصفها بدلًا من الزاوية:
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)تكون القفزة فورية، أما العودة فتكون تدريجية. وهذا ما يجعلها تبدو كنبضة: إذ يعيدها جزء مقداره 0.2 إلى حجمها خلال نحو ربع ثانية.
بالنسبة إلى صورة، غيّر حجمها باستخدام pygame.transform.scale_by(image, pop)، وضع مركز Rect الخاص بها بالطريقة نفسها.
التحدي
سهلانقر على الجوهرة البنفسجية لجمعها. اجعل الأيقونة الذهبية تنبثق:
- اجعل
pop = 1.0قبل الحلقة. - عيّن
pop = 1.6عند جمع جوهرة. - في كل إطار، أعدها تدريجيًا إلى وضعها الأصلي:
pop += (1 - pop) * 0.2. - ارسم الأيقونة بعرض وارتفاع
int(20 * pop)بكسل، مع إبقائها متمركزة عند(30, 30).
جرّب بنفسك
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Picker")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
gem = pygame.Rect(300, 200, 24, 24)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and gem.collidepoint(event.pos):
score += 1
coin_sound.play()
gem.topleft = (random.randint(80, 420), random.randint(90, 300))
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (170, 90, 230), gem)
icon = pygame.Rect(0, 0, 20, 20)
icon.center = (30, 30)
pygame.draw.rect(screen, (255, 200, 60), icon)
label = font.render(f"x {score}", True, (240, 240, 240))
screen.blit(label, (52, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس الصوت وإحساس اللعب
تدرّب بنفسك: Playground لـ Pygame