Kugel durch das Bild laufen lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fragezeichen123
User
Beiträge: 18
Registriert: Donnerstag 7. April 2016, 19:32

Hallo Forum!

Bin ein Python-Anfänger und habe ein kleines Problem:

Ich programmiere gerade ein kleines Spiel in dem es erstmal zwei Bälle (Kreise) gibt: Einer wird vom Spieler selbst gesteuert (Bereits fertig); der andere läuft die ganze Zeit durch das Bild... mein Problem ist jetzt, dass ich nicht weiß, wie man einen Ball programmiert, der von alleine durch das Bild läuft und auch an den Ecken und Kanten abprallt und dann die Richtung wechselt...

Zudem weiß ich auch garnicht, ob es bei Python überhaupt möglich ist, zwei Dinge gleichzeitig ausführen... zum einen muss sich ja der eine Ball die ganze Zeit (ohne Unterbrechungen) bewegen, zum anderen muss der selbstgesteuerte Ball ja auch darauf warten, dass ich einen Mausklick mache (was ich ja schon programmiert habe). Kann Python das überhaupt gleichzeitig ausführen?

Das ganze ist letztendlich, wie ein einfacher Bildschirmschoner (von dem ich auch nicht weiß, wie man ihn programmiert :P )... nur mit einer anderen Funktion gleichzeitig.

Bitte fragt, wenn etwas unklar ist :idea: ....

LG :D
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@fragezeichen123: Du hast BlackJacks frage nach dem "Framework" aus Deinem anderen Thread noch nicht beantwortet. Wenn Du tatsächlich auf Tk aufbaust, dann gibt es kein "gleichzeitig" oder ein "die ganze Zeit". Frameworks verarbeiten Events und das Abarbeiten eines Events darf nur sehr kurze Zeit dauern, sonst hängt das ganze System. Bei Dir gibt es also Events wie Mausclicks und Events die alle x Millisekunden ausgelöst werden, um den Ball zu bewegen. Wenn Du das Problem Kollision zweier Bälle gelöst hast, dann sollte das Problem Kollision mit dem Bildschirmrand einfacher sein.
BlackJack

@fragezeichen123: Falls das Rahmenwerk dieses `graphics`-Modul ist, dann verwendest Du zwar Tk, kannst das selber aber nicht so einfach verwenden, weil der Autor von dem Modul seine API über Tk drübergelegt hat, so dass man damit nicht direkt in Berührung kommen muss, allerdings leider hat er dass dann auch so gruselig gelöst, dass man auch Tk nicht mehr *normal* mit dem Modul zusammen verwenden kann. Der hat sich beispielsweise konsequent dagegen gewehrt die Tk-Hauptschleife zu verwenden und aktualisiert die GUI selber und seine „auf Maus warten“- und „auf Tastendruck warten“-Methoden sind blockierend und betreiben in dem Zusammenhang „busy waiting“ mittels Schleife `update()`-Methode und `time.sleep()`.

Damit zwingt er den Programmierer ebenfalls zu „busy waiting“ im Zusammenhang mit den `checkMouse()`- und `checkKey()`-Methoden. Du müsstest Dein Hauptprogramm also so schreiben, dass Du eine Schleife hast, die mit `checkMouse()` prüft ob der Benutzer irgendwo hin geklickt hat, gegebenenfalls darauf entsprechend reagiert, dann die Animation einen Schritt weiter setzt/berechnet, sehr kurz wartet, und dann wieder zum Schleifenanfang geht.
Antworten