image image


Worknote: Erste Schritte mit P5 (Python)

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.

image

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:

  1. 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. 😜
  2. An der Performance muß noch gearbeitet werden. Ab 50 hüpfenden Bällen ist eine spürbare Entschleunigung festzustellen und 100 hüpfende Bälle ruckelten nur noch über den Bildschirm meines Mac Pros (von Ende 2013).
  3. Es ist noch lange nicht alles implementiert, was den Kern von Processing ausmacht. Die Referenz verrät darüber mehr und im Issue-Tracker könnt Ihr Eure Ergänzungs- und Erweiterungswünsche loswerden.

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!


(Kommentieren) 

image image



Ü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


Werbung


image  image  image
image  image  image


image