Hallo -
folgendes Szenario: Lukas wollte auch die Geschwindigkeit seines LKW steuern, und zwar auch mit Rückwärtsfahrt. Schon vorher sind wir über den "Schieber" gestolpert. Er wollte, dass Stillstand ca. bei Reglerstand beim unteren Drittel eintritt; nach unten dann Rückwärtsfahren (braucht nicht so schnell zu sein), nach ober vorwärts.
1. Problem: Man kann den Schieber auch beim Malen einfügen; Lukas hat einen roten Strich daneben an die Nullposition gemalt. Nach "Keep" sind die zwei Dinge aber *nicht* verbunden ("grouped"), sondern bleiben einzeln und fallen beim Herumschieben wieder auseinander - sehr unerwartet. Wir haben dann kurz herumgeschaut nach einer zusätzlichen "Gruppierung", aber im EToys-Kontext ist uns nicht eingefallen, wo das sein könnte ... geht halt nicht.
2. Befragt nach dem Wertebereich des Schiebers, war Lukas' sofortige Antwort "0 ganz unten und 100 ganz oben". Das ist nun vielleicht ein "kulturelles" Vorurteil (auch von einigen Computerspielen, die Lukas kann), aber auch die anderen Zahlenwerte, die bisher aufgetaucht sind (Winkel, Geschwindigkeiten, x- und y-Position) sind immer ganze Zahlen (im Gegensatz zur Realität - aber didaktisch doch ok) - daher ist 0.00 bis 1.00 schon sehr unerwartet und unserer Meinung nach "falsch".
3. Jetzt kommt aber das richtige Problem: Wir haben uns - mit Hilfe einer Tabelle auf Papier - Funktionen überlegt, um aus dem Schieber 0.00...1.00 die Geschwindigkeit -2...+8 zu machen. Die erste Funktion war (Schiebers Reglerwert - 0.2) * 10 Wir haben also a. ein Skript für "LKW fährt vorwärts um" herausgezogen b. den "Schiebers Reglerwert" auf das "5" gezogen c. "mit Bauchweh" (wegen der Klammern) dann "- 0.2" angehängt d. und dann "* 10" Leider wird das "- 0.2" ohne irgendeine Meldung akzeptiert - aber intern dann gleich auf 0 gerundet (oder abgeschnitten). Das ist nicht ok.
[Wieso ich das (c) zugelassen habe? Erstens machen wir "exploratives Lernen" - hätt ja gehen können :-) Zweitens weiß ich, dass dahinter Smalltalk steht - und dort gilt ja immer "links vor rechts", also hätte es ja - zwar didaktisch riskant/falsch, weil *gegen* "Punkt- vor Strichrechnung" - doch auch gehen können]
Ich habe nun aber lange genug mit Programmen zu tun - also haben wir nach ausprobieren und Nix-mit-Rückwärts die Zahlen angeschaut, und da war statt 0.2 eben 0 ... also neue Funktion ...
4. ... natürlich (für mich - Lukas war schon etwas verdattert, weil unsere schön erarbeitete erste Funktion nicht "wollte") jetzt Schiebers Reglerwert * 10 - 2 ... geht aber auch nicht. Big bug: Das Ergebnis im Skript (habe ich heute erst mit Lukas nachgeschaut) ist get___Value * (10 - 2) !!!!???????????????? (und für die erste Funktion mit dem abgeschnitteten 0.2 ->0 war das Ergebnis get___Value - (0 * 10) ). Ich erwarte mir auf jeden Fall strenge "Punkt- vor Strichrechnung" - alles andere ist falsch. (Und dann muss man natürlich für max: und min: auch die Prio definieren -2 "vernünftige" Möglichkeiten wären m.E. "Strichrechung" = +, - "Punktrechnung" = alles andere oder "Vergleichsrechnung" = min:, max: "Strichrechung" = +, - "Punktrechnung" = alles andere
Gleichrangige Operatoren natürlich wie üblich von links nach rechts.
Beispiel eines EToys-Ausdrucks: Wert1 - 3 max: 4 - Wert2 * 5 Im ersten Fall wäre die Klammerung (Wert1 - (3 max: 4)) - (Wert2 * 5) im zweiten Fall : ((Wert1 - 3) max: (4 - (Wert2 * 5)) Das zweite ist "für mich" viel "richtiger" - wohl, weil ich max: irgendwie mit <= in einen Topf werfe ...
Regards Harald