Pixel mỗi giây
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 22 trên 35.
Tốc độ 4 pixel mỗi khung hình chỉ bằng 240 pixel mỗi giây khi chạy ở tốc độ 60 khung hình mỗi giây. Ở tốc độ 30 khung hình mỗi giây, cùng trò chơi đó chạy với tốc độ bằng một nửa. Thay vào đó, hãy đặt tốc độ theo pixel mỗi giây, rồi nhân với dt để tính quãng đường di chuyển trong khung hình này:
speed = 200
if keys[pygame.K_RIGHT]:
x += speed * dtỞ tốc độ 60 khung hình mỗi giây, dt xấp xỉ 0.017 và quả bóng di chuyển khoảng 3.4 pixel mỗi khung hình. Ở tốc độ 30 khung hình mỗi giây, dt xấp xỉ 0.033 và quả bóng di chuyển khoảng 6.7 pixel: gấp đôi quãng đường mỗi khung hình, nhưng vẫn là 200 pixel mỗi giây.
Vị trí có thể là số thập phân, chẳng hạn 243.4. Điều đó không sao: pygame chấp nhận vị trí thập phân và vẽ trên các pixel nguyên.
Thử thách
DễĐặt tốc độ của quả bóng theo đơn vị pixel mỗi giây.
- Trước vòng lặp, đặt
speed = 200. - Cho mỗi phím mũi tên di chuyển quả bóng một đoạn
speed * dtthay vì 4.
Nhấn Chơi và giữ các phím mũi tên: quả bóng di chuyển 200 pixel mỗi giây. Sau đó, nhấn Kiểm tra.
Tự làm thử
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Pixels per Second")
clock = pygame.time.Clock()
x, y = 240, 180
dt = 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]:
x -= 4
if keys[pygame.K_RIGHT]:
x += 4
if keys[pygame.K_UP]:
y -= 4
if keys[pygame.K_DOWN]:
y += 4
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (255, 196, 0), (x, y), 16)
pygame.display.flip()
dt = clock.tick(60) / 1000
pygame.quit()
Tất cả bài học trong Vòng lặp trò chơi
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hìnhTự luyện tập: Playground Pygame