Changes between Version 47 and Version 48 of squeak_faq


Ignore:
Timestamp:
11/16/2016 10:49:23 AM (7 years ago)
Author:
patrick.rein
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • squeak_faq

    v47 v48  
    4646==== Anzeigen von Bildern ==== #images-in-squeak
    4747
    48 Folgender Code zeichnet das Bild <Squeak-Image>!/Contents/Resources/anImage.jpg in einen `ImageMorph`:
     48Folgender Code zeichnet das Bild anImage.jpg das in dem Ordner liegt in dem ihr auch das <Squeak-Image>! findet in einen `ImageMorph`:
    4949
    5050{{{
     
    6767
    6868{{{
    69     ImageMorph new
     69ImageMorph new
    7070    image: (ImageReadWriter formFromFileNamed:  (FileDirectory uri: 'folder/anImage.jpg') fullName);
    7171    openInHand
     
    7676
    7777Bilder können auch im Image gespeichert werden. Das hat den Vorteil, das ihr die Bilder über Monticello verwalten könnt und so alle Teammitglieder über das Repository die aktuellen Bilder bekommen.
    78 Dazu speichert ihr die Bilder in Methoden, die Array-Repräsentationen der Grafiken zurückgeben. Dazu laded ihr das Bild, wie oben beschrieben, zuerst in eine Form und aus dieser erzeugt ihr dann das Array (siehe. z.B. `Form>>storeOn`).
     78Dazu speichert ihr die Bilder in Methoden, die Array-Repräsentationen der Grafiken zurückgeben. Dazu ladet ihr das Bild, wie oben beschrieben, zuerst in eine Form und aus dieser erzeugt ihr dann das Array (siehe. z.B. `Form>>storeOn`).
    7979
    8080
     
    8787=== Können !ImageMorph bzw. deren enthaltene Form mit Alphatranparenz umgehen? Wie können ganze Morphs ausgeblendet werden? ===
    8888
    89 Verwendet die Methode `Morph>>hide`, um einen Morph sofort ohne fade out zu verstecken. Denkt bitte daran, dass ausgeblendete Morphs dennoch im Speicher verbleiben. Eine Squeak-Methoden-Suche nach `alpha` oder `alpha:` (eine Nachricht, die wahrscheinlich Konstrukte haben wird, bei denen man eine Transparenz einstellen kann) liefert eine Klasse namens: `AnimAlphaBlendingCanvas`.
     89Verwendet die Methode `Morph>>hide`, um einen Morph sofort ohne fade out zu verstecken. Denkt bitte daran, dass ausgeblendete Morphs dennoch im Speicher verbleiben. Eine Squeak-Methoden-Suche nach `alpha` oder `alpha:` (eine Nachricht, die wahrscheinlich Klassen haben, bei denen man eine Transparenz einstellen kann) liefert eine Klasse namens: `AnimAlphaBlendingCanvas`.
    9090
    9191=== Wie schaffe ich es, dass ein Morph nicht mehr verschiebbar ist? ===
     
    9898==== Wieso stepping zu langsam sein kann ====
    9999
    100 Das Stepping Model von Morphic ist relativ einfach und basiert auf einem Prozess, welcher alle stepping Methoden ausführt, wenn ihre `Morph>>stepTime` abgelaufen ist. Im Umkehrschluss heißt das aber auch je mehr `Morph>>step` Methoden je häufiger aufgerufen werden, desto mehr Zeit wird zwischen einzelnen Schritten benötigt (da mehr berechnet wird). Die `#stepTime` gibt dabei einen Wunschwert an, nach dem die `#step` Methode wieder aufgerufen werden soll. Nun kann es aber sein, dass die `#step` Methoden soviel zu tun haben (oder andere Prozesse), dass die Überprüfung nur alle 50 ms ausgeführt wird und somit kann eine Zeit von 33 ms nicht garantiert werden. Allerdings wird durch die beschriebene Bewegung eine explizite `#runStepMethods` Message an die Welt gesendet, welcher die Abarbeitung aller steps auslöst. Das heißt der UI Prozess löst bei seiner Reaktivierung eine neu Berechnung aus.
     100Das Stepping Model von Morphic ist relativ einfach und basiert auf einem Prozess, welcher alle stepping Methoden ausführt, wenn ihre `Morph>>stepTime` abgelaufen ist. Im Umkehrschluss heißt das aber auch je mehr `Morph>>step` Methoden aufgerufen werden, desto mehr Zeit wird zwischen einzelnen Schritten benötigt (da mehr berechnet wird). Die `#stepTime` gibt dabei einen Wunschwert an, nach dem die `#step` Methode wieder aufgerufen werden soll. Nun kann es aber sein, dass die `#step` Methoden soviel zu tun haben (oder andere Prozesse), dass die Überprüfung nur alle 50 ms ausgeführt wird und somit kann eine Zeit von 33 ms nicht garantiert werden. Allerdings wird durch die beschriebene Bewegung eine explizite `#runStepMethods` Message an die Welt gesendet, welcher die Abarbeitung aller steps auslöst. Das heißt der UI Prozess löst bei seiner Reaktivierung eine Neuberechnung aus.
    101101
    102102==== Lösungen ====
     
    146146Das !ColorArray scheint seiner Implementierung zu Folge etwas speicherfreundlicher zu sein als ein normales Array mit Color Objekten. Diese besondere Art kodiert Farben in ihre 32 Bit Repräsentation und speichert diese ab also genau 4 Byte. Beim näheren betrachten der Color Class fällt allerdings auf, dass Farben durchaus mehr Speicher in Anspruch nehmen können (durch cache Mechanismen usw.). Daher kann es in bestimmten Situation sinnvoll sein (wenn viele Farben benötigt werden z.B. in einem Bitmap oder einer Colorform) diese in nur 4 Byte abzulegen. Vermutlich kann hier auch die VM etwas optimieren, wenn grundsätzlich 4 Byte pro Element festgelegt sind.
    147147
    148 === Gibt es eine gute Möglichkeit in !Squeak/Morphic mit Vektorgraphikenzu arbeiten? Am besten wäre natürlich SVG. ===
     148=== Gibt es eine gute Möglichkeit in !Squeak/Morphic mit Vektorgraphiken zu arbeiten? Am besten wäre natürlich SVG. ===
    149149
    150150Squeak hat von Haus aus keinen SVG Support. Es gibt aber das [http://map1.squeakfoundation.org/package/7318c055-ce88-4a98-8d4d-2b8cf92e1920/autoversion/4 SVGMorph Package] von Gary Chambers, das ihr euch per Installation der entsprechenden .mcz in des Image holen könnt. Dieses Paket hat bereits für einige Projekte gut funktioniert.
     
    205205== Sound ==
    206206
    207 === Wie kann man Soundeffekte im Image abspielen? ===
    208 
    209 Beispiel:
    210 {{{
    211 (SampledSound fromWaveFileNamed: 'daffyduck1.wav') play.
    212 }}}
    213 
    214 Allgemein lohnt sich ein Blick auf die !SoundSystem Klassen, z.B. !BaseSoundSystem und die ganze Sound-Synthesis Kathegorie.
    215 
    216 
    217207=== Gibt es eine Möglichkeit Soundeffekte aus Dateien zu laden und abzuspielen? ===
    218208
     
    222212}}}
    223213Interessante Klassen sind hier !SoundSystem default (bzw !BaseSoundSystem und die ganze Sound-Synthesis Kathegorie)
    224 
    225 
    226214
    227215
     
    290278
    291279
    292 2.) Du kannst in Squeak jeder Klasse `#allInstances` senden und bekommst dann eine Liste, die alle Objekte der Klasse enthält. An diese Liste können dann mit dem [#collection-protocol Collection-Protokoll]. Nachrichten an alle Objekte geschickt werden. Somit kannst du die Objekte bearbeiten oder mittels stopStepping zum Stillstand bringen.
    293 
    294 
    295 === Wie kann ich die Ausführung in meinem Images unterbrechen? ===
     2802.) Du kannst in Squeak jeder Klasse `#allInstances` senden und bekommst dann eine Liste, die alle Objekte der Klasse enthält. An diese Liste können dann mit dem [#collection-protocol Collection-Protokoll]. Nachrichten an alle Objekte geschickt werden. Somit kannst du die Objekte bearbeiten oder mittels `#stopStepping` zum Stillstand bringen.
     281
     282
     283=== Wie kann ich die Ausführung in meinem Image unterbrechen? ===
    296284
    297285Indem ihr einen Interrupt an das Image sendet. Das geht mit: Strg + . (Windows), Alt + . (Linux),  CMD + . (OS X).
     
    409397
    410398Wenn der Debugger geöffnet ist, kann man z.B. im Menü (Rechtsklick o.ä. auf die Titelleiste)
    411 "copy text" wählen. Dann ist der dargestellte Callstack in die Zwischenablage kopiert und kann gewohnt in allen Anwendungen eingefügt
     399"copy text" wählen. Dann ist der dargestellte Callstack in die Zwischenablage kopiert und kann wie gewohnt in allen Anwendungen eingefügt werden.
    412400
    413401=== Frame-Rate messen ===