image image


image

Überraschung! TigerJython besitzt eine eigene Vektoren-Klasse

Da habe ich mir am Wochenende doch so viel Mühe gegeben, TigerJython mit meiner PVector-Klasse zu verheiraten und dann finde ich wenige Tage später heraus, daß TigerJython eine eigene Vektoren-Klasse besitzt, die GGVector heißt. Sie ist eigentlich Teil der GameGrid-Bibliothek, aber da sie – wie meine eigene PVector-Implementierung – nicht selber zeichnet, dachte ich mir, daß sie unabhängig von GameGrid auch mit anderen TigerJython-Bibliotheken, wie zum Beispiel GPanel oder GTurtle funktionieren müßte. Also habe ich mein kleines Testskript entsprechend geändert und GGVector zusammen mit GPanel eingesetzt:

from gpanel import *
from gamegrid import GGVector

WIDTH = 640
HEIGHT = 360
                
class Mover():
    
    def __init__(self):
        self.position = GGVector(320, 180)
        self.vel = GGVector(2.8, 1.6)
        self.d = 20
        self.color = makeColor(248, 239, 34)
        
    def update(self):
        self.position = self.position.add(self.vel)
        if self.position.x <= self.d or self.position.x >= WIDTH - self.d:
            self.vel.x =  -self.vel.x
        if self.position.y <= self.d or self.position.y >= HEIGHT - self.d:
            self.vel.y = -self.vel.y
   
    def draw(self):
        pos(int(self.position.x), int(self.position.y))
        setColor(self.color)
        fillCircle(self.d)
        setColor("black")
        circle(self.d)

def drawBackground():
    setColor(makeColor(146, 82, 161))
    fillRectangle(-2, -2, WIDTH + 2, HEIGHT + 4)

def onCloseClicked():
    keepGoing = False
    print("I did it, Babe!")
    dispose()

makeGPanel(Size(WIDTH, HEIGHT), closeClicked = onCloseClicked)
window(0, WIDTH, 0, HEIGHT)
title("Steering 2 (mit GGVector)")
enableRepaint(False)

mover = Mover()

keepGoing = True
while keepGoing:
    drawBackground()
    mover.draw()
    mover.update()
    repaint()
    delay(30)

Alles lief wie geschmiert. Die Implementierung von GGVector unterscheidet sich doch ein wenig von meiner PVector-Implementierung (die ja Processings GVector-Klasse nachempfunden ist), so daß ein Blick in die (Java-) Dokumentation immer sehr hilfreich ist, aber die Klasse ist auch sehr umfangreich und dürfte für die meisten Zwecke ausreichen.

Darauf gestoßen bin ich durch dieses Beispielprogramm zur Schwarmsimulation, das die Klasse GGVector zwar nutzt, aber sie nirgendwo einführt. Aber es ist ein schönes Beispiel dafür, wie man – mit GameGrids Actor-Klasse und GGVector – Rotationen durchführt, ohne so etwas wie Processings pushMatrix() und popMatrix() bemühen zu müssen. Ich werde daher versuchen, in den nächsten Tagen die Simulation des Steering-Verhaltens aus »The Nature of Code« ähnlich in TigerJython zu implementieren. Immer noch still digging! Denn wie man sieht, lohnt es sich manchmal weiterzugraben. 🤓


(Kommentieren) 

image image



Ü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!


Werbung


image  image  image
image  image  image


image