Pixel pro Sekunde
Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 19 von 32.
Eine Geschwindigkeit von 4 Pixeln pro Frame entspricht nur bei 60 Frames pro Sekunde 240 Pixeln pro Sekunde. Bei 30 läuft dasselbe Spiel mit halber Geschwindigkeit. Gib Geschwindigkeiten stattdessen in Pixeln pro Sekunde an und multipliziere mit dt, um den Schritt für dieses Frame zu erhalten:
speed = 200
if keys[pygame.K_RIGHT]:
x += speed * dtBei 60 Frames pro Sekunde beträgt dt ungefähr 0.017, und der Ball bewegt sich etwa 3.4 Pixel pro Frame. Bei 30 beträgt dt ungefähr 0.033, und er bewegt sich etwa 6.7: pro Frame doppelt so weit, aber dieselben 200 Pixel pro Sekunde.
Positionen werden zu Dezimalzahlen wie 243.4. Das ist in Ordnung: pygame akzeptiert Dezimalpositionen und zeichnet auf ganzen Pixeln.
Aufgabe
Einfach- Setze vor der Schleife
speed = 200. - Sorge dafür, dass jede Pfeiltaste den Ball um
speed * dtstatt um 4 bewegt.
Probier es selbst
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()
Alle Lektionen in Die Spielschleife
1Bewege ein Quadrat
Öffne ein FensterFülle den Hintergrund4Bewegung nach Zeit
Delta-ZeitPixel pro SekundeVector2Beschleunigung und ReibungAm Bildschirmrand umkehrenÜbe selbstständig: Pygame-Playground