Menu
CoddyTech

每秒像素数

本课属于 Coddy Pygame 学习旅程的“游戏循环”单元。第 22 课,共 35 课。

每帧移动 4 像素,只有在每秒 60 帧时才相当于每秒移动 240 像素。每秒 30 帧时,同一个游戏的运行速度会减半。请改用每秒像素数表示速度,再乘以 dt 来计算这一帧的移动量:

speed = 200

if keys[pygame.K_RIGHT]:
    x += speed * dt

每秒 60 帧时,dt 约为 0.017,小球每帧移动约 3.4 像素。每秒 30 帧时,dt 约为 0.033,小球每帧移动约 6.7 像素:每帧移动距离是两倍,但每秒移动的距离仍是 200 像素。

位置会变成 243.4 这样的十进制数。这没问题:pygame 接受十进制位置,并会在整数像素上绘制。

challenge icon

挑战

简单

将球的速度设为每秒多少像素。

  1. 在循环之前,设置 speed = 200。
  2. 让每个方向键按 speed * dt 移动球,而不是 4。

按“开始”并按住方向键:球每秒移动 200 像素。然后按“检查”。

亲手试试

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()

游戏循环中的所有课

自己练习: Pygame 在线编辑器