Beispielprogrammierung für JS gesucht.

meinolf.mueller shared this question 5 months ago
Answered

Hallo,

gibt es hier irgendwo eine Dokumentation, wie animierte GEOGEBRA Apps zu erstellen sind? z.B. Erzeugung einer Sinuskurve über eine Rotationsbewegung des Einheitskreises? Darin ein Button, der bei Anklicken die Sinusbewegung in eine Kosinusbewegung umschaltet und ähnliche Spielchen mehr?

Und falls nicht, wiw kann ich mich diesbezgl. Weiterbilden?

Comments (15)

photo
1

Klingt nicht unbedingt nach JS, ehr nach einer WENN-Abfrage und einem Schieberegler - die fahren auch Animationen...

Hier laufen zwei Schiebregler: Drehung Kreis um x-Achse, Kreis um y-Achse


https://wiki.geogebra.org/e...

photo
1

Hallo, vielen Dank für diese Antwort, leider führt mich das nicht unbedingt weiter, da ich was Eventprogrammierung bei Animationen anbelangt, blutiger Anfänger bin und keinerlei Ahnung habe. Ich bräuchte erst mal eine einfache Anleitung. Hierzu habe ich die im Anhang beigefügte .ggb Datei erstellt. Darin befinden sich zwei Schieberegler a und b. Jetzt möchte ich folgendes haben:

Bei Start der Animation springt Regler a auf seinen Anfangswert 0 und läuft dann schrittweise zum Maximalwert. Ist der Maximalwert erreicht, bleibt er stehen und Regler b beginnt zu laufen von 0 beginnend bis zum Maximalwert. Ist dieser erreicht, springen beide zurück auf ihre Anfangswerte und das Spiel beginnt von vorne, bis die Animation gestoppt wird. Wird diese gestoppt, springen die Regler noch auf einen Initialwert und zwar Regler a auf 1 und Regler b auf 0.

Wenn mir irgendein Fachmann von euch diese Animation in anhängende .ggb-Datei einbauen, mir dann zurückschicken könnte, damit ich mir das dort anschauen kann, wie es programmiert ist, das würde mir riesig weiterhelfen.

Vielen Dank schon mal.

photo
1

Hm,


is nicht ganz klar, wie es laufen soll - ich würde einen einzigen Slider einsetzen und mit dem a und b rausrechnen, etwa


If[-5 ≤ x ≤ 5, If[c > 3, 3, c] x³ + If[c < 3, 0, c - 3]]

c=0...6, repeat: increesing, speed: 0.2

+ einen Button, der die Animation startet, bzw beendet und den Endzustand herstellt.


void setAnimating(String objName, boolean animate) 3.2 Sets whether an object should be animated. This does not start the animation yet, use startAnimation() to do so.

void startAnimation() 3.2 Starts automatic animation for all objects with the animating flag set, see setAnimating()

void stopAnimation() 3.2 Stops animation for all objects with the animating flag set, see setAnimating()

boolean isAnimationRunning() 3.2 Returns whether automatic animation is currently running.

BTW: Ich hab den Eindruck, dass eventlistner und geogebra nicht besonders gut harmonieren - hab aber keine Erfahrung damit...

photo
1

Dokumentationen sind dazu vermutlich nur in englisch zu finden. Aber das Forum hier hat zu solchen allgemeinen Problemen meist schon Lösungen hervorgebracht. Einfach mal etwas suchen:

photo
1

Hallo,

nach intensiver Recherche habe ich mein Problem (fast) zum Laufen gebracht, bis auf eine winzige Stelle. Im Skript für einen Schieberegler a ist definiert:

Wenn[a>2.8, StartAnimation(b, true),b=0]

Wenn[a==3, StartAnimation(a, false)]

Wenn[a==3,a=1]

Befehl 1 und 2 Funktionieren einwandfrei, das Wenn(a==3, a=1) wird jedoch total ignoriert. Was habe ich da falsch gemacht?

photo
1

Sehe davon ab in der Skript-Umgebung Syntax wie "Variable=Wert" zu nutzen wenn du Werte ändern möchtest. Nutze dazu den Skript-Befehl SetzeWert( <Objekt>, <Objekt> ). Sonst kann ich nur den Tipp geben, dass die Abfrage "==" bei Schiebereglern kritisch anzusehen ist. Für eine explizite Problemlösung rate ich dir die Datei zur Verfügung zu stellen.

photo
1

Hallo -Loco- besten Dank für den Tipp, jetzt habe ich die zuvor geschilderten Probleme gelöst, alles läuft rund mit Ausnahme meiner "STOP" Schaltfläche, Im Scripting befindet sich dort (bei Mausclick)

StartAnimation(a,false)

SetzeWert(a,d)

SetzeWert(b,e)

StartAnimation(a,false)

Aber das SetzeWert(a,d) wird total ignoriert. Und nur durch das zweimalige StartAnimation(a,false) konnte ich die Animation vom Schieberegler a auf false bringen.

Entsprechende .ggb-Datei im Anhang.

photo
1

Total ignoriert? Schau mal in die Zeile 6 des Skripts des Schiebereglers b.

photo
1

Ich hät da noch mehr Fragen

- warum müssen Anzeigebedingungen für text per script gesetzt werden?

- und wenn warum bei jedem Update?

- was ist e?

- wieso Slider b und in Funktion c und c true/false?

- was soll ggbOnInit bewirken?

photo
1

@hawe

Anzeigebedingungen: müssen nicht, das ist Schönheit, ich wollte den einen String nicht anzeigen, wenn b=0 ist sondern den anderen Text.

Bei jedem Update: weil b ja ein Schieberegler ist, also ist b irgendwann ungleich null, und dann soll eben der andere Text angezeigt werden.

e ist nur eine Variable, da -Loco- ja geschrieben hat, man solle im Skripting Zuweisungen wie etwa b=0 vermeiden, sondern SetzeWert(<Objekt>,<Objekt>) nehmen. Und da in SetzeWert(b,0/1) nur true oder false setzt, musste ich eine Variable e definieren, die mir a bzw. b wirklich auf Null setzt.

Slider b da es zwei Animation gibt. die nacheinander ablaufen und sich gegenseitig starten und anhalten.

Die Funktion c ist lediglich ein Test von mir für eine Checkbox und hat mit der Anwendung eigentlich nichts zu tun.

Was das ggbOnInit bewirken soll? Das weiß ich selber nicht. Das hat GEOGEBRA einfach dort eingefügt, ohne mein zutun.


@ -Loco -

Danke, hab ich gesehen.Ich verstehe das so, dass durch die Zuweisung b=0 im STOP-Button ein Update auf den Regler b vorgenommen wird, der wiederum a auf Null setzt und die Animation von a startet, sodass die Anweisung a=1 im Stop-Skript ignoriert wird.

Ganz schön Tricky die Geschichte. Ich muss wohl über eine Hilfsvariable laufen.

photo
1

Hm,


ich bin mir nicht sicher ob Du schon gesehen hast, dass jedes Objekt im Eigenschaftendialog (Tab Erweitert) einen Eintrag "Bedingungen, um das Objekt anzuzeigen" hat. Man kann diese Bedingungen natürlich per Skript setzen, dann reicht es sie einmal zu setzen und sie müssen bestimmt nicht bei jedem Update neu geschrieben werden. In Deinem Fall schein es mir ausreichend die Bedingungen direkt im Eigenschaftdialog zu hinterlegen - ich sehe jetzt keine Notwendigkeit, das per Skript zu machen...

Ich bin mir ziemlich sicher, dass (SetzteWert) Objekt auch eine skalare Größe wie Integer oder Boolean sein kann?

Mich verwirrt es, dass in Deiner Funktion vom Achsenabschnitt c die Rede ist, der aber vom Slider b bedient wird.


Mir erscheint nach wie vor mein Konzept eine Animation ein Slider, nach dem a und b(oder c) gestellt werden, die unproblematischere Lösung. Wie weit ist mein Beispiel von Deiner Lösung weg?

Files: test.ggb
photo
1

Ach, noch was:


Funktionieren bei eueren Email-Benachrichtungen die Back-Links zu dem Diskussionsfaden hier- bei mir nämlich nicht - die sind leer...

photo
1

@hawe

Hallo danke, das mit dem Eigenschaftendialog habe ich nicht gewusst, OK, man lernt ja nie aus, ich habe die Eigenschaften gesetzt und die Befehle aus dem Skripting eliminiert, alles OK. (Übrigens, die Werte waren dort schon ohne mein Wissen gesetzt, was wahrscheinlich durch das Skripting erfolgte.

Zu SetzeWert(<object><object>) kann sich vielleicht noch einmal -Loco- äußern, aus der Online-Dokumentation geht nicht hervor, dass hiermit auch numerische Werte zuordenbar sind.

OK, Schieberegler b war bereits definiert, bevor ich den Text mit c hinzufügte, war einfach zu faul, das zu ändern. In der endgültigen Version sind die Schieberegler sowieso unsichtbar.

Animation mit einem Slider:

Ja, da bist du noch ziemlich weit weg. Es sollte so laufen:

a läuft von 0 bis 3 , während dieser Zeit wird b nicht animiert. In dem Moment, wo a die 3 erreicht, wird a auf 1 zurückgesetzt und b beginnt zu laufen und zwar von 0 bis 3 und danach von -3 bis 0. Während dieser Zeit pausiert a auf dem Wert 1. Hat b wieder den Wert 0 erreicht, beginnt a wieder zu laufen und zwar von 0 bis 3, während b pausiert. Bei Erreichen der 3 wird a auf 1 zurückgesetzt und b beginnt wieder zu laufen wie zuvor beschrieben. Das ganze wiederholt sich dann, bis der Stop Button gedrückt wird, der alles wieder auf Ausgangsposition setzt mit a=1 und b=0.

Meine momentan funktionierende Version im Anhang. Bin natürlich für Vereinfachungen jederzeit offen, wie gesagt, ist meine allererste Animation mit Skripting.

photo
1

Also ich weiss nicht, wo Du da Unterschiede siehst, wenn ich beide nebeneinander stelle dann läuft das exakt gleich ab a=0...3 b=0, a=1 b=0...3 -3...0 mit r als Animation-Treiber-Slider r=0...9

photo
1

OK, sorry, hab nicht richtig hingeschaut. Ist wesentlich einfacher als meines und werde das so integrieren.

Vielen Dank.

photo
© 2019 International GeoGebra Institute