Oops! I did it again! Ich bin momentan so fasziniert von der Python Arcade Bibliothek, daß ich mich hingesetzt habe und die Sketche aus dem ersten Kapitel von Daniel Shiffmans Buch »The Nature of Code« noch einmal portiert habe. Diesmal eben nicht nach Pygame Zero, sondern nach Arcade. Und es hat Spaß gemacht. 🤓
Den vollständigen Quellcode der Skripte e_1_7 bis e_1_11 findet Ihr in meinem GitHub-Repositorium, die möchte ich hier nicht widerkäuen. Als Beispiel für die Eleganz der Python Arcade Bibliothek zeige ich hier nur das abschließende Skript, in dem viele Mover der Maus folgen:
import arcade import random from pvector import PVector WIDTH = 400 HEIGHT = 400 TITLE = "Many Movers follow Mouse" NO_MOVERS = 15 colorlist = [(239, 242, 63), (198, 102, 230), (151, 87, 165), (129, 122, 198), (98, 199, 119)] class Mover(): def __init__(self): self.radius = random.randrange(10, 20) self.mouse = PVector(200, 200) # Position und Velocity x = random.randrange(self.radius, WIDTH - self.radius) y = random.randrange(self.radius, HEIGHT - self.radius) self.position = PVector(x, y) v_x = random.randrange(-10, 10) v_y = random.randrange(-10, 10) self.velocity = PVector(v_x, v_y) # Maximalgeschwindigkeit self.topspeed = 10 # Farbe self.color = random.choice(colorlist) def draw(self): arcade.draw_circle_filled(self.position.x, self.position.y, self.radius, self.color) arcade.draw_circle_outline(self.position.x, self.position.y, self.radius, arcade.color.BLACK) def update(self): dir = self.mouse - self.position dir.normalize() dir.mult(0.5) self.acceleration = dir self.velocity.add(self.acceleration) self.velocity.limit(self.topspeed) self.position.add(self.velocity) if (self.position.x >= WIDTH + self.radius): self.position.x = -self.radius elif (self.position.x <= -self.radius): self.position.x = WIDTH - self.radius if (self.position.y >= HEIGHT + self.radius): self.position.y = -self.radius elif (self.position.y <= -self.radius): self.position.y = HEIGHT - self.radius class MyWindow(arcade.Window): def __init__(self): super().__init__(WIDTH, HEIGHT, TITLE) arcade.set_background_color(((149, 224, 245))) self.movers = [] for _ in range(NO_MOVERS): self.movers.append(Mover()) def on_draw(self): arcade.start_render() for mover in self.movers: mover.draw() def on_update(self, delta_time): for mover in self.movers: mover.update() def on_mouse_motion(self, x, y, dx, dy): for mover in self.movers: mover.mouse = PVector(x, y) MyWindow() arcade.run()
Die Python Arcade Bibliothek kommt viel besser mit der objektorientierten Programmierung zurecht als Pygame Zero (das ist zumindest mein Eindruck) und so liegt die ganze Kraft dieser Portierung in der Klasse Mover
, so wie es auch Shiffman in seinen Processing (Java)-Sketchen gewollt hat.
Mir gefällt das so sehr, daß ich die nächsten Kapitel versuchsweise ebenfalls nach Arcade portieren möchte. Und da die Arcade-Bibliothek die Physik-Engine Pymunk unterstützt, sollte dies selbst für Teile des fünften Kapitels (das sich mit Physik-Engines befaßt) möglich sein. Still digging!
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung
Diese Spalte wurde absichtlich leergelassen!