Du tror du tegner objektene bare én gang

Handler om: Spilløkke

Du tror at når du har tegnet et objekt på skjermen, blir det stående der. Men i en spilløkke må du tegne ALT på nytt hvert eneste bilde — etter at du har tømt skjermen. Glemmer du å tømme, smører gamle posisjoner utover som en hale; glemmer du å tegne på nytt inni løkka, ser du ingenting bevege seg.

Eksempel

Du tegner ballene før while-løkka og lar løkka bare flytte dem. Tallene (x, y) endrer seg, men bildet på skjermen oppdateres aldri — så det ser ut som ingenting skjer.

Slik tenker du riktig om det

Tenk på spilløkka som en tegnefilm: hvert bilde er en ny tegning. Rutinen er alltid den samme tre-takt: tøm skjermen → oppdater alle objekter → tegn alle på nytt. Tegning hører hjemme INNI løkka, ikke før den.

Slik ser det ut i kode

Slik gikk det galt

# tegner ballene FOER loekka - bare en gang
for ball in baller:
    ball.tegn(skjerm)

while spiller:
    for ball in baller:
        ball.flytt()                 # de flytter seg, men skjermen oppdateres aldri

Slik fikser du det

while spiller:
    skjerm.fill((0, 0, 0))          # 1) toem skjermen hvert bilde
    for ball in baller:
        ball.flytt()                 # 2) oppdater tilstand
        ball.tegn(skjerm)            # 3) tegn paa nytt hvert bilde
    pygame.display.flip()

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala