Am 19.09.2004 um 11:10 schrieb Harald Mueller:
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.
- 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.
Doch, geht ;-)
Man kann Objekte ineinander einbetten. Am einfachsten ist wohl, du holst dir ein Rechteck aus dem Lager und verschiebst den Schieber und Strich darüber. Jetzt den Halo für den Schieber aktivieren, im Menu roten Halo-Smarties "einbetten in..." - "Rechteck" auswählen. Genauso für den Strich. Falls das Rechteck stört, kann man dessen Farbe dann noch transparent machen. Danach muss man nur aufpassen, nicht das schwarze Smartie zu verwenden, da man damit ein Objekt aus dem momentanen Behälter heraushebt (erkennbar am Schatten). Das braune Smartie verschiebt dagegen nur das Objekt, ohne es hochzuheben.
In manchen Objekten passiert das Einbetten automatisch, z.B. in der Spielwiese und dem Behälter.
- 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".
Über die Defaultwerte könnte man trefflich streiten - aber all das kannst du im Betrachter des Schiebers einstellen. Dort findest du eine Kategorie "Regler" (die sollte natürlich eigentlich "Schieber" heißen, bzw der Schieber lieber Schieberegler? Hmm) in der du den Wertebereich einstellen kannst, Runden erzwingen ("abrunden" - naja, an der Übersetzung müssen wir noch feilen), und auch den Bereich umkehren. Zusätzlich kann man im Menu vom "Reglerwert" die Anzahl der Dezimalstellen auf 0 setzen, sieht netter aus als 85.00.
Für dein Autobeispiel könnte man also den Werte-Bereich direkt von -2 bis +8 setzen und kommt so ohne Verrenkungen (die leider momentan nötig sind) zum Ziel. Zum direkten Steuern kann man auch gut den Joystick aus dem Lager verwenden, den kann man entweder mit der Maus bedienen oder mit einem echten Joystick, da kommt schon fast Spielhallengefühl auf ;-)
- 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 ...
Zu der Formel - siehe unten. Aber das Rundungsproblem kann ich nicht nachvollziehen - wo wurde gerundet?
- ... 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 ...
Da hast du eines der wesentlichen Probleme der momentanen EToys erkannt - der Formeleditor ist keiner. Wir behelfen uns momentan mit dem Aufteilen "komplexerer" Ausdrücke auf mehrere Zeilen, notfalls unter Zurhilfenahme von Variablen: Der LKW bekommt eine Variable "Geschwindigkeit" (der "v"-Knopf oben im Betrachter). Dann macht man mehrere Zeilen: LKWs geschwindigkeit := Schiebers reglerWert - 0.2. LKWs geschwindigkeit := LKWs geschwindigkeit * 10. LKW gehe vorwärts um LKWs geschwindigkeit. Alternativ kann man Ausdrücke "rückwärts" aufbauen, aber lesbar wird das dann auch nicht. In deinem Fall müsste man aus der 5 beim "gehe vorwärts" eine 10 machen, dann mit dem Reglerwert multiplizieren, und von diesem 0.2 abziehen: LKW gehe vorwärts um 10 * (Schiebers reglerWert - 0.2). Nicht schön, und für Kinder auf jeden Fall ungeeignet.
Steht auf der ToDo-Liste für den EToys-Nachfolger mit ganz oben.
- Bert -