Die gestrige Nachricht, daß P5 (Python), ein »native« Python-Mode für Processing, weiterentwickelt wird und es eine lauffähige Version geben soll, hat mich nicht in Ruhe gelassen. Denn mit ihm würden alle auf Jython basierende Restriktionen, denen Processing.py unterliegt, wegfallen (kein NumPy, SciPy, pandas und keine MatPlotLib) und es würden sich völlig neue Möglichkeiten zwischen Python und Processing auftun.
Ich habe daher gestern abend mal schnell P5 installiert. Die Installation verlangte auf den Mac nur zwei Befehle im Terminal,
brew install glfw
pip install p5 --user
nahm aber eine geraume Zeit in Anspruch, was unter anderem auch daran lag daß Homebrew vor der Installation von GLFW sich unbedingt updaten wollte. Auch pip
wollte ein Update, war aber damit zufrieden, daß ich dieses Update erst nach der Installation von P5 vornahm.
Im Gegensatz zur Alpha-Version vor einem Jahr lief dann P5 bei mir mit meinem Anaconda-Python. Ich habe eine Version des klassischen »Bouncing Balls« programmiert und diese hüpften dann auch brav durch das von P5 aufgemachte Fenster. Wer es nachprogrammieren will, hier ist der vollständige Quellcode:
from p5 import *
import random as r
class Ball(object):
def __init__(self):
self.r = r.randint(8, 12)
self.vel = Vector(1, 1)*r.uniform(2.0, 6.0)
self.dir = Vector(-1.5, 1.5)
self.pos = Vector(r.randint(0, width), r.randint(0, height))
self.red = (r.randint(100, 255))
self.green = (r.randint(0, 150))
self.blue = (r.randint(0, 255))
def update(self):
self.pos.x += self.vel.x*self.dir.x
self.pos.y += self.vel.y*self.dir.y
def display(self):
fill(self.red, self.green, self.blue)
no_stroke()
circle((self.pos.x, self.pos.y), self.r*2)
def checkEdges(self):
# rechter Rand
if (self.pos.x > width - self.r and self.dir.x > 0):
self.dir.x *= -1
# linker Rand
if (self.pos.x < self.r and self.dir.x < 0):
self.dir.x *= -1
# top
if (self.pos.y < self.r and self.dir.y < 0):
self.dir.y *= -1
# bottom
if (self.pos.y > height - self.r and self.dir.y > 0):
self.dir.y *= -1
balls = []
def setup():
size(640, 480)
# title("Bouncing Ball")
for _ in range(25):
balls.append(Ball())
def draw():
background(0, 0, 0)
for ball in balls:
ball.display()
ball.checkEdges()
ball.update()
run()
Einige Anmerkungen und Caveats, die sich aus meinen Spielereien ergeben haben, möchte ich aber noch loswerden:
titel()
funktioniert nicht, respektive zeigt nur den ersten Buchstaben des Titels in der Titelzeile des Fensters an. Läßt man title()
weg, wird in der Titelzeile p5
angezeigt. Ich nehme daher an, daß dieses Verhalten kein Bug, sondern ein Feature ist. 😜Ich betrachte daher P5 (Python) noch nicht als fertig für den produktiven Einsatz, aber ich denke, das Teil ist auf dem richtigen Weg und der Wechsel von PyGlet nach GLFW hat ihm gutgetan. Ich werde die Entwicklung daher weiter und mit Spannung im Auge behalten. Still digging!
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, 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