1秒あたりのピクセル数
CoddyのPygameジャーニー「ゲームループ」セクションの一部。レッスン 19/32。
1フレームあたり4ピクセルの速度は、1秒あたり60フレームの場合に限り、1秒あたり240ピクセルです。1秒あたり30フレームでは、同じゲームが半分の速度で動きます。代わりに、速度を1秒あたりのピクセル数で指定し、dtを掛けてこのフレームでの移動量を求めます:
speed = 200
if keys[pygame.K_RIGHT]:
x += speed * dt1秒あたり60フレームでは、dtは約0.017で、ボールは1フレームあたり約3.4ピクセル移動します。30フレームでは、dtは約0.033で、約6.7ピクセル移動します。つまり、1フレームあたり2倍の距離を移動し、1秒あたりの移動距離は同じ200ピクセルです。
位置は243.4のような小数になります。問題ありません。pygameは小数の位置を受け付け、描画時には整数ピクセルを使います。
チャレンジ
簡単- ループの前に、
speed = 200を設定します。 - 各矢印キーで、ボールを4ではなく
speed * dtだけ動かします。
自分で試してみよう
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プレイグラウンド