Âm thanh khi có sự kiện
Thuộc phần Âm thanh và cảm giác chơi trong hành trình Pygame của Coddy. Bài học 2 trên 23.
Âm thanh gắn với một khoảnh khắc: đồng xu được nhặt, cánh cửa mở ra, kẻ địch bị đánh trúng. Code của bạn đã có vị trí dành cho từng khoảnh khắc, đó là câu lệnh if làm thay đổi trò chơi khi sự việc xảy ra. Phát âm thanh bên trong chính câu lệnh if đó:
if player.colliderect(coin):
score += 1
coin_sound.play()
coin.x = random.randint(20, 444)if chỉ đúng trong một khung hình, vì đồng xu di chuyển đi ngay trong khung hình đó. Vì vậy, âm thanh chỉ phát một lần cho mỗi đồng xu.
Nếu phát ở nơi khác, âm thanh sẽ lỡ mất khoảnh khắc của nó. Nếu đặt trong đoạn code vẽ bên dưới if score > 0:, âm thanh sẽ phát lại ở mọi khung hình sau khi nhặt đồng xu đầu tiên: 60 lần mỗi giây, tạo thành tiếng vo ve kéo dài.
Thử thách
DễThêm âm thanh cho mỗi đồng xu.
- Trước vòng lặp, tải
assets/sounds/coin.oggvàocoin_sound. - Phát âm thanh trong câu lệnh
ifdùng để nhặt đồng xu, mỗi đồng xu một lần.
Nhấn Chơi rồi dùng các phím mũi tên để nhặt một đồng xu: bạn sẽ nghe thấy âm thanh. Sau đó nhấn Kiểm tra.
Tự làm thử
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Coins")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 160, 40, 40)
coin = pygame.Rect(100, 100, 16, 16)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
player.clamp_ip(screen.get_rect())
if player.colliderect(coin):
score += 1
coin.x = random.randint(20, 444)
coin.y = random.randint(50, 324)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 210, 60), coin)
pygame.draw.rect(screen, (90, 200, 120), player)
score_text = font.render(f"Coins: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Âm thanh và cảm giác chơi
4Rung màn hình và chớp sáng khi trúng đòn
Rung màn hìnhChớp sáng khi trúng đònKhựng hình khi trúng đònGiữ hiệu ứng tinh tếTự luyện tập: Playground Pygame