image image


image

Braintrust-Query: Nutzer-Interaktion in Graphics.py?

Für die Osterfeiertage hätte ich mal eine kleine Frage an die Weisheit der Cloud: Wie gestern angekündigt, hatte ich versucht, Daniel Shiffmans Vektor-Tutorials aus »The Nature of Code« in Graphics.py nachzuprogrammieren. Lief auch eigentlich alles gut, nur wenn ich eine Interaktion mit dem Nutzer einbauen wollte, rannte ich in Probleme. Solange ich den Nutzer außen vorlies und einfach ein Laufvariable hochzählte, war alles in Ordnung.

keep_going = True
i = 0
while keep_going:

# snip

    while i > 1200:
        keep_going = False
        win.close()
        sys.exit()
    i += 1
    c.move(velocity.x, velocity.y)
    c.draw(win)
    gfx.update()

Die Animation läuft dann schön flüssig und ohne Ruckeln. Möchte ich sie aber in einer Endlosschleife laufen lassen, in der der Nutzer entscheidet, wenn die Schleife beendet wird, dann wird es unschön: Sobald ich checkMouse() oder checkKey() in die Schleife einbaue, beginnt das Fenster ganz schön zu flackern und die Animation ruckelt gewaltig.

Daher meine Frage an Euch da draußen. Ist das eine Beschränkung von graphics.py, die der Einfachheit und Anfängerfreundlichkeit der Bibliothek geschuldet ist, oder habe ich da etwas übersehen? Ich bin für jede Antwort und jeden Hinweis in meinen (Email-) Kommentaren oder über die sozialen Netze dankbar.

Hier der komplette Quellcode:

from pvector import PVector
import graphics as gfx
import sys

WIDTH = 400
HEIGHT = 400
RADIUS = 16
FPS = 15

location = PVector(100, 100)
velocity = PVector(1.0, 3.3)

win = gfx.GraphWin("Bouncing Ball", WIDTH, HEIGHT, autoflush = False)
win.setBackground("yellow")
c = gfx.Circle(gfx.Point(location.x, location.y), RADIUS)
c.setFill("red")
c.setOutline("black")
c.draw(win)

keep_going = True
i = 0
while keep_going:
    c.undraw()
    location.add(velocity)

    # check border
    if (location.x > WIDTH - RADIUS) or (location.x < RADIUS):
        velocity.x *= -1
    if (location.y > HEIGHT - RADIUS) or (location.y < RADIUS):
        velocity.y *= -1
    while i > 1200:
        keep_going = False
        win.close()
        sys.exit()
    i += 1
    c.move(velocity.x, velocity.y)
    c.draw(win)
    gfx.update()

In der Zwischenzeit werde ich mal versuchen, Shiffmans Vektor-Tutorien in Pygame Zero nachzubauen.1 Still digging!

  1. ich weiß, Pygame besitzt eine eigene Vektorbibliothek, aber die erscheint mir etwas undurchsichtig und unnötig kompliziert. Wenn mir aber jemand den Link zu einem vernünftigen Tutorial oder einer lesbaren Beschreibung dazu schickt, ändere ich vielleicht meine Meinung. 🤓 


(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