Scrollen#
Oft möchtest du, dass sich der Bildschirm „scrollt“.
Die einfachste Möglichkeit dafür ist es, den Hintergrund zu „verschieben“.
Damit es flüssig funktioniert, muss der Hintergrund als Actor
erstellt werden, und du brauchst zwei Hintergründe.
Beide Hintergründe bewegen sich von rechts nach links (oder von oben nach unten, links nach rechts – je nach Spiel). Sobald ein Hintergrund den Bildschirm verlässt, wird er rechts wieder angefügt.
So entsteht der Eindruck einer „endlosen“ Landschaft.
Im Code kann das wie folgt umgesetzt werden:
Erstelle den Hintergrund zweimal mit demselben Bild und platziere sie nebeneinander.
Es ist hilfreich, beide Hintergründe in einer Liste zu speichern, um sie gemeinsam zu bewegen.
back0 = Actor()
back0.add_costume(BACKGROUND)
back0.size = WIDTH, HEIGHT
back1 = Actor(WIDTH, 0)
back1.size = WIDTH, HEIGHT
back1.add_costume(BACKGROUND)
backs = [back0, back1]
In der Methode world.act
, die in jedem Frame aufgerufen wird, kannst du den Bildschirm scrollen:
@world.register
def act(self):
for back in backs:
back.x -= 1
if back.x <= -WIDTH:
back.x = WIDTH
Vollständiges Beispiel:
from miniworlds import *
WIDTH, HEIGHT = 800, 400
world = World(WIDTH, HEIGHT)
left, bottom = WIDTH/2, HEIGHT/2
BACKGROUND = "desertback"
back0 = Actor()
back0.add_costume(BACKGROUND)
back0.size = WIDTH, HEIGHT
back1 = Actor(WIDTH, 0)
back1.size = WIDTH, HEIGHT
back1.add_costume(BACKGROUND)
backs = [back0, back1]
walker = Actor((100, HEIGHT - 100))
walker.size = 100, 60
walker.add_costumes(["walk1", "walk2"])
walker.speed = 1
walker.count = 0
@world.register
def act(self):
for back in backs:
back.x -= 1
if back.x <= -WIDTH:
back.x = WIDTH
walker.count += walker.speed
if walker.count > 11:
costume = walker.next_costume()
walker.count = 0
@world.register
def on_key_down(self, keys):
if "q" in keys:
world.quit
world.run()
Hinweis: Die Idee stammt vom Blog schockwellenreiter, wo Jörg Kantereit diesen Code ursprünglich mit Pygame Zero umgesetzt hat.