Bộ đếm khung hình
Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 27 trên 39.
Nhân vật đi ngang qua cửa sổ, nhưng chân không bao giờ cử động: nhân vật luôn hiển thị frames[0]. Nếu hiển thị khung hình khác sau mỗi lần, hình sẽ nhấp nháy 60 lần mỗi giây, quá nhanh để thấy chân cử động. Thay vào đó, hãy giữ mỗi hình trong vài khung hình, dùng bộ đếm:
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)timer đếm số khung hình. Cứ sau 10 khung hình, bộ đếm quay lại 0 và frame_index chuyển sang hình tiếp theo. % len(frames) đưa chỉ số quay lại 0 sau hình cuối cùng, vì vậy chuyển động đi bộ lặp lại mãi, bất kể danh sách có bao nhiêu khung hình.
Vẽ frames[frame_index]. Ở tốc độ 60 khung hình mỗi giây, mỗi tư thế hiển thị trong một phần sáu giây: một dáng đi thong thả. Số nhỏ hơn 10 làm chân cử động nhanh hơn.
Thử thách
Trung bìnhKhiến nhân vật bước đi.
- Trước vòng lặp, tạo
frame_index = 0vàtimer = 0. - Mỗi khung hình, tăng
timerthêm 1; khi đạt 10, đặt lại thành 0 rồi tăngframe_index, dùng% len(frames)để quay về đầu. - Vẽ
frames[frame_index]tại(x, 300).
Nhấn Chơi: chân nhân vật chuyển động khi đi. Sau đó nhấn Kiểm tra.
Tự làm thử
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Walk Cycle")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
x = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
x += 2
if x > 640:
x = -72
screen.fill((20, 22, 40))
screen.blit(frames[0], (x, 300))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Sprite và hình ảnh
5Va chạm chính xác đến từng pixel
Hình chữ nhật thật bất côngMặt nạSprite chính xác đến từng pixelVùng va chạm hình tròn3Lớp cho đối tượng trong trò chơi
Lớp đầu tiên của bạnPhương thứcSelf là đối tượngDanh sách đối tượngĐối tượng có hình ảnhDanh sách kẻ địchLớp con6Hoạt ảnh từ sprite sheet
Cắt sprite sheetBộ đếm khung hìnhTạo hoạt ảnh theo thời gianHiệu ứng nổ chỉ chạy một lầnTự luyện tập: Playground Pygame