Anleitung: Roter Baron#
In diesem Kapitel erstellen wir Schritt für Schritt einen Side-Scrolling-Shooter.
Die Techniken zum Erstellen von Parallax-Hintergründen, zur Steuerung von Geschwindigkeit und Bewegung sowie zur Erzeugung von Gegnern sind in vielen Spielen üblich. Nach diesem Tutorial wirst du sie in deinen eigenen Projekten anwenden können.
Basierend auf:
https://github.com/kantel/pygamezero/tree/master/tappyplane
Lizenz: Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 4.0 International
Voraussetzung: Grundkenntnisse in Klassen
Schritt 1: Grundgerüst erstellen#
Du brauchst eine Welt, in der Akteure platziert werden können. Die letzte Zeile muss world.run()
sein:
from miniworlds import World, Actor, timer, Text
world = World(800, 480)
// your code here
world.run()
Ordner vorbereiten#
Lege deine Bilder für den Hintergrund, den Spieler und die Gegner im Ordner images
ab:
my_code
|
|--images
|----planered1.png
|----background.png
|----groundgrass.png
|----shipbeige.png
|----shipblue.png
|----shipgreen.png
|----shippink.png
|----shipyellow.png
(Die Bilder findest du hier: miniworlds-cookbook – red baron)
Hintergründe erstellen#
Erstelle zwei Hintergründe nebeneinander, um endloses Scrollen zu simulieren:
back0 = Actor()
back0.add_costume("background")
back0.size = world.width, world.height
back1 = Actor(world.width, 0)
back1.size = world.width, world.height
back1.add_costume("background")
backs = [back0, back1]
Um sie zu animieren:
@world.register
def act(self):
for back in backs:
back.x -= 1
if back.x <= -world.width:
back.x = world.width
for ground in grounds:
ground.x -= 2
if ground.x <= -world.width:
ground.x = world.width
Schritt 2: Flugzeug-Klasse erstellen#
Flugzeug-Klasse definieren#
class Plane(Actor):
def on_setup(self):
self.add_costume("planered1")
Instanz erstellen#
Am Ende deines Codes:
plane = Plane(100, world.height / 2)
Physik hinzufügen#
on_setup()
erweitern:
def on_setup(self):
self.add_costume("planered1")
self.gravity = 0.1
self.velocity_y = 0
Physik simulieren#
def act(self):
self.velocity_y += self.gravity
self.velocity_y *= 0.9 # friction
self.y += self.velocity_y
Aufwärtskraft bei Tastendruck hinzufügen#
def on_key_down_w(self):
self.velocity_y -= 5
Schritt 3: Gegner hinzufügen#
Importieren:
from random import randint, choice
Gegner-Klasse erstellen#
class Enemy(Actor):
def on_setup(self):
self.add_costume(choice(enemyships))
def reset(self):
self.x = randint(world.width + 50, world.width + 500)
self.y = randint(25, world.height - 85)
Gegner hinzufügen#
enemies = []
for _ in range(10):
enemy = Enemy()
enemy.reset()
enemies.append(enemy)
Gegner bewegen#
on_setup()
erweitern:
def on_setup(self):
self.add_costume(choice(enemyships))
self.speed = -1.5
Dann:
def act(self):
self.x += self.speed
if self.x <= -self.width:
self.reset()
Schritt 4: Schießen hinzufügen#
Erstelle die Bullet-Klasse:
class Bullet(Actor):
def on_setup(self):
self.add_costume("laserred")
self.x = plane.x
self.y = plane.y
self.speed = 25
self.fire = False
def act(self):
self.x += self.speed
def on_detecting_enemy(self, enemy):
enemy.reset()
def on_detecting_not_on_world(self):
self.remove()
Kompletter Beispielcode#
…