Changes between Version 31 and Version 32 of squeak_faq


Ignore:
Timestamp:
11/23/2013 12:14:44 AM (10 years ago)
Author:
jakob.reschke
Comment:

Eintrag über plattformabhängige keyUp/keyDown Codes hinzugefügt

Legend:

Unmodified
Added
Removed
Modified
  • squeak_faq

    v31 v32  
    679679
    680680Dadurch, dass Array-Literale schon zur Kompilierzeit feststehen, ist das Erzeugen von Arrays damit billiger als mit {}. Falls die Werte im Array jedoch nicht konstant sind, sondern sich erst zur Laufzeit ergeben, oder wenn ihr das Array später verändern wollt (dazu gehören auch Nachrichten wie z. B. `sort:`, die eine Collection in-place verändern), nutzt bitte die Schreibweise mit geschweiften Klammern. Andernfalls würdet ihr das in die Methode einkompilierte Array verändern, was zu Problemen führen kann...
     681
     682=== Wie bekomme ich plattformunabhängige Tastencodes bei !KeyUp und !KeyDown? ===
     683
     684Die mit keyValue bzw. keyCharacter abrufbaren Tastencodes, die dem `KeyboardEvent`, welches mit `keyUp:` und `keyDown:` übergeben wird, wenn man diese Events durch seine Morph-Klasse behandeln lässt, sind von Plattform zu Plattform bzw. von VM zu VM verschieden. Beim `keyStroke:`-Event sind die Codes plattformunabhängig, allerdings bietet einem dieses Event unter Umständen nicht das gewünschte Verhalten. Gruppen, die sowohl mit Windows als auch Mac OS X oder Linux arbeiten und ein zum Beispiel Spiel entwickeln, bei dem man Tasten gedrückt halten soll, könnte das Probleme bereiten.
     685
     686Leider muss man sich darum selbst kümmern, indem man die benötigten Tastencodes für jede Plattform herausfindet und dann anhand der Plattform, auf der die VM gerade läuft, entscheidet, welche Codes berücksichtigt werden sollen. Die Plattform kann man mit `Smalltalk os platformName` ermitteln (die Rückgabewerte sind z. B. `'mac os'`, `'win32'` und `'unix'`). Eine Möglichkeit wäre, die Tastencodes auf der Klassenseite abzulegen und beim Zugriff darauf anhand der Plattform zu entscheiden, welcher der Codes zurückgegeben werden soll. Hier gibt es mehrere Varianten jeweils mit Vor- und Nachteilen (Plattform-Unterscheidung bei jedem Zugriff? Objekt mit aktuellen Codes anlegen? Wie sicherstellen, dass das richtige verwendet wird, wenn man das Image von einer Plattform zur anderen kopiert?). Überlegt, was sich für euer Projekt am besten eignet.