[Squeak-ev] EToys: 2 Bugs in "Expression-Builder";
und "falscher" Wertebereich bei Schieber; und Problem mit Malen+Lager
Bert Freudenberg
bert at impara.de
Son Sep 19 11:54:12 UTC 2004
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.
>
> 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.
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.
> 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".
Ü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
;-)
> 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 ...
Zu der Formel - siehe unten. Aber das Rundungsproblem kann ich nicht
nachvollziehen - wo wurde gerundet?
> 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 ...
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 -