Toplayınca Zıpla
Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 18 / 23.
Bir mücevher topladığında puan bir artar, ancak gözün köşede değil mücevherdedir. Kısa bir patlama dikkati sayaca çeker: simge büyüyerek zıplar, sonra eski boyutuna küçülür.
Normal boyut için 1.0 değerini kullanan bir ölçek tut. Bir eşya toplandığında bunu 1.6 olarak ayarla; her karede, daha öncekiyle aynı satırı kullanarak 1'e doğru yumuşakça yaklaştır:
pop = 1.6 # bir mücevher toplandığında
pop += (1 - pop) * 0.2 # her karedeÇizerken boyutu ölçek belirler. Rect'i bu boyutta oluştur, ardından merkezini yerine yerleştir; böylece simge köşesinden değil, ortasından büyür:
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)Sıçrama anlıktır, geri dönüş ise yumuşatılmıştır. Patlama etkisini veren budur: 0.2'lik bir oran, yaklaşık çeyrek saniyede eski boyutuna dönmesini sağlar.
Bir görsel için, pygame.transform.scale_by(image, pop) kullanarak ölçeklendir ve Rect'ini aynı şekilde ortala.
Görev
KolayMor mücevhere tıklayarak onu topla. Altın simgenin büyüyüp küçülmesini sağla:
- Döngüden önce
pop = 1.0yap. - Bir mücevher toplandığında
pop = 1.6olarak ayarla. - Her karede yumuşakça eski değerine döndür:
pop += (1 - pop) * 0.2. - Simgeyi genişliği ve yüksekliği
int(20 * pop)piksel olacak şekilde, merkezi yine(30, 30)noktasında çiz.
Kendin dene
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()
Ses ve Oyun Hissi bölümündeki tüm dersler
4Ekran Sarsıntısı ve Darbe Parlaması
Ekran SarsıntısıDarbe ParlamasıDarbe DurdurmasıAbartıdan Kaçının6Yıldız Devriyesini Geliştir
Yıldız Devriyesi SesleriHer Vuruşta KıvılcımlarKendi başına pratik yap: Pygame playground