[Squeak-ev] Praktische Fragen zu EToys
Andreas Gerdes
squeak at skalarsoft.com
Die Dez 7 02:37:24 UTC 2004
Klaus,
ich glaube, was additionsToViewer etc. angeht, bist du auf der
squeak-dev-Liste besser aufgehoben - du schreibst ja selbst, du willst
einen Morph erfinden...
Ich hab grad mal selbst experimentiert. Einer eigenen Morphklasse einen
Slot hinzuzufügen, ist kein Problem, einer bestehenden Klasse eine neue
Viewer-Kategorie, auch nicht, aber da dann einen Slot oder einen Befehl
hineinzubekommen, geht nicht, jedenfalls nicht beim SketchMorph.
Hm...
> Das hängt mit der Sprachunterstützung zusammen.
Inwiefern? Was weißt du noch zu dem Thema?
Kann hier jemand mal den Begriff Vokabular/EToy-Vokabular etwas näher
erläutern?
Zu deiner letzten Mail:
>- Wie bekomme ich die Mausposition in einem Script?
Playfield hat in der Viewer-Kategorie playfield die aktuellen
Mauskoordinaten.
>- Wie kann ich ein Skript triggern, wenn das Objekt gedreht wird?
Indem du in seinem Owner (einem Spielfeld/Playfield) einen Test "Objekts
richtung ~= Objekts alteRichtung" einbaust? - wobei Objekts alteRichtung
eine Instanzvariable von Objekt ist - Instanzvariablen sind auch der
Schlüssel zur Schleifenprogrammierung.
>- Wie verhindert man einen Resize?
Im Menü aller Morphe findest du "be locked/geschützt" und "resist being
picked up/verankert"
>- Wie kann man einen eigenen Morph-Typ dem Objekt-Manager zufügen?
http://minnow.cc.gatech.edu/squeak/2998:
Add a class side method #descriptionForPartsBin (browse implementors).
This method returns a description of how to create and present a new
morph. If you want several different entries in the Objects Tool, you
can use #supplementaryPartsDescriptions.
Wirf auch einen Blick in die Kategorie Morphic-Demo.
>- Was macht man genau mit einem Skriptfenster?*
ich glaub, es unterscheidet sich vom Spielfeld vor allem dadurch, dass
es eigene, *private* Stop-Step-Go buttons hat. So kannst du mehrere
unabhängige Skriptingbereiche in einem Projekt oder zb GeeMailMorph haben.
> - Wie sorgt man dafür, dass Größenänderungen an die Submorphs
> weitergegeben werden?
> - Umgekehrt: Wie sorgt man dafür, dass ein Resize im Submorph an den
> Besitzer weitergegeben wird ODER
Du musst wohl neue Morphklassen ableiten, die sich in ihrer Step-Methode
entsprechend verhalten.
Oder aber du befasst dich mit layoutPolicy/Tablelayouts (z.B. im Menü
eines Rechtecks, gibt ein Tutorial dazu auf Squeakmap), vielleicht
reicht das ja schon?
>wie sorgt man dafür, dass man einen Submorph nicht selektieren kann.
Schwierig - selektieren von Morphs explizit zu verbieten... ist
irgendwie nicht squeaklike - ALLES in Squeak lässt sich selektieren,
inspizieren, kopieren -
>- Wenn ich Morphs zusammensetze: Welche Koordinate verwende ich?
> Offensichtlich verwendet man in drawOn absolute Screenkoordinaten.
> Wenn ich aber mit addMorph einen Morph hinzufüge, erscheint dieser
> an einer 'position' relativ zur oberen linken Ecke des Morphs.
Das scheint nur so. Wenn du deinem Morph *keine* layoutPolicy zuweist
und ihn *vor* dem addMorph:xyz schon verschiebst, erscheint der neu
hinzugefügte xyz an 0/0 auf dem Screen.
Im Morph-Protokoll geometry findest du alles, was du für
relative/globale Koordinaten brauchst.
> - Wie kann ich eigenes Vokabular definieren? Ich will einen Morph
> (z.B. "Koordinatensystem") definieren. Der soll "skalieren" u.ä.
> "verstehen"
Zuerst mal geht's doch darum, eine *Message* "skalieren: faktor" zu
implementieren?
Schon mal Diego Gomez' Plotmorph probiert (bekommst du über
Weltmenü->Öffnen->SqueakMap-Packageloader)
Was hast du eigentlich vor?
Willst du mit EToy einen Graph-Editor bauen? KRASS...
Mich würd auch interessieren, wo, mit welcher Altersgruppe etc. du
Squeak einsetzt.
Viele Grüße
Andreas
Klaus Füller schrieb:
> Esther Mietzsch wrote:
>
>> Hallo Klaus,
>>
>> Am Sunday 21 November 2004 22:48 schrieb Klaus Füller:
>>
>>> Fragen zu EToys
>
> ...
>
>>> - Wie kann ich eigenes Vokabular definieren? Ich will einen Morph
>>> (z.B. "Koordinatensystem") definieren. Der soll "skalieren" u.ä.
>>> "verstehen"
>
> ...
> (Bitte schaut noch einmal am Ende dieser Mail. Ich begründe dort noch
> einmal, warum ich eigenes Vokabular definieren will...)
>
> Das ist die Kernfrage, ich kann sie nun genauer stellen:
>
> Eine Morph-Klasse kommuniziert mit dem EToy-System über die
> Klassenmethode #additionsToViewerCategories. Diese Methode gibt eine
> Liste von Einträgen mit, wie sie im "Viewer" erscheinen sollen. Das
> verstehe ich.
>
> Allerdings gelingt es mit nicht, Änderungen an dieser Liste vorzunehmen.
> Neueinträge erscheinen nicht im Viewer; Geänderte Einträge verschwinden
> aus dem Viewer. Das hängt mit der Sprachunterstützung zusammen.
> Neuerdings gibt es eine andere Möglichkeit, dass ein Morph über ein
> "Vocabulary" (oder ist es ein "EToyVocabulary"?) irgendwie dem Viewer
> sagt ... und da versiegt meine Intuition.
>
> Ein Hinweis gibt es von Ned Konz in squeak-dev am 24.Juni 04. Ich
> verstehe den zweiten Teil aber nicht richtig.
>
> Zusammenfassung: Ich will einen Morph erfinden, der neue Einträge im
> Viewer macht, die man in "Kacheln" verwenden kann, um Programme zu
> schreiben. Ich möchte das in der / für die neuste Version schreiben,
> wenn #additionsToViewerCategories veraltet ist, will ich es überhaupt
> nicht verwenden.
>
> Was will ich damit?
>
> Mir ist immer noch nicht ganz klar, ob die Scripting-Umgebung in Squeak
> dem Einstein-Spruch folgt "Make it as simple as possible *but not
> simpler* . Mir ist nicht klar, wie ich beispielsweise eine Schleife
> programmieren lassen kann. Beispielsweise könnte ich die Schülerinnen
> Programme schreiben lassen, die Wertetabellen und Säulendiagramme von
> Funktionen anzeigen.
>
> HILFE!
>
> klaus
>
>
>