Actionscript: override vs. final vs. protected

Gegeben: Klasse A, mit Funktion

Klasse B beerbt Klasse A, Klasse C beerbt Klasse B. In Klasse B kann ich

schreiben, also “nachträglich” die Funktion auf final setzen. In Klasse C kann ich sie dann nicht mehr überschreiben – aber natürlich noch aufrufen. FYI.

Robotlegs: mediatorMap.mapView()

Folgende Situation: Ich habe einen Context, den ich an mehrere Module hänge. Diese Module sind immer vom Typ AbstractStoryPage, aber manchmal auch vom Typ AbstractStoryLastPage. Im Context will ich nur für AbstractStoryLastPages einen Mediator mappen. Erste Experimente zeigen, dass ich nicht

aufrufen kann. Offenbar muss ich die konkrete Klasse nehmen, nicht eine Überklasse. Aber: Anders als der Methodenkopf

nahe legt, kann ich dort nicht nur eine Klasse oder einen Namen übergeben, sondern auch eine Instanz. Und jeder Context hält die Instanz seines Views als DisplayObjectContainer contextView. Was also geht:

Now you know. Verzweigungen im Context basierend auf der Überklasse des Views, aber ohne die konkreten Klassen mit reinkompilieren zu müssen.

Flash: tabEnabled vs. tabChildren

Weil’s neulich gerade aufkam: Wenn ein SWF den Focus hat, kann man mit Tab durch zB Eingabefelder springen. Das ist gut. Was schlecht ist: Das jeweils gewählte Eingabefeld bekommt dann so einen gelben Rahmen. Der hat vermutlich denselben Grund wie die “outline” in CSS: Die Bedienbarkeit ohne Maus zu erhöhen. Er hat aber auch denselben Nachteil: Designer mögen ihn nicht 🙂

Wer ihn entfernen will (den Rahmen, nicht den Designer), kann entweder flash.display.InteractiveObject.tabEnabled auf false setzen. Das müsste man aber für jedes Eingabefeld machen. Alternativ setzt man flash.display.DisplayObjectContainer.tabChildren auf false, und zwar auf den root-Clip.

Flash: addFrameScript()

Großartige undokumentierte Funktion, die Kollege Menzel da entdeckt hat: MovieClip.addFrameScript()!

Man denke zum Beispiel an

Kein Event.ENTER_FRAME, kein nix. Was man damit alles machen kann: FLAs/SWCs komplett Code-frei halten. Eine SWF mit Logik, eine mit Design. Viele schlaue Sachen.

Unexpected multiname type: 16

FDT 4 plus Flex 4 melden mir gerade

[mxmlc] Unexpected multiname type: 16
[mxmlc] Unexpected multiname type: 16
[mxmlc] /Users/Shared/workspace/foo/bar/lib/util/VectorUtils.as
[mxmlc] Fehler: Typ wurde nicht gefunden oder war keine Kompilierungszeit-Konstante: .

Keine Ahnung was das ist – aber beheben kann ich es durch Löschen aller .swf.cache-Dateien und Zurücksetzen des Compilers.

Witzigerweise gibt es einen Eintrag in den Adobe-Foren dazu, in dem auch Vector involviert ist… der scheint mir noch nicht ganz ausgereift zu sein. So kann ich zum Beispiel als Übergabeparameter einer Funktion nicht Vector.<*> angeben (auch nicht Vector.<Object>), sondern nur *, aber das führt hier vllt zu weit.

Flash Player (10.1): Verbindung mit dem Debugger herstellen

Neulich im Flash Builder: “Es wird auf die Verbindung von Adobe Flash Player mit dem Debugger gewartet”. Die kommt aber nie zustande. Ich hatte das Problem bisher immer, also auch mit dem Flash Player 9 in FDT, …, aber in diesem Fall war es der Flash Player 10.1 (Debug), OS X, Firefox, Flash Builder. Die Lösung:

  1. Run your application in debug mode
  2. Right click over the Flash movie
  3. Change the option from Localhost to “Other Machine”
  4. Type the IP address 127.0.0.1
  5. Click Connect

Danke auch an Christian 🙂

Großartiges Blog

Troy Gilbert scheint mir auch über den letzten Beitrag hinaus ein äußert viel versprechendes Blog zu sein – Leseprobe gefällig?

shapes always get enter frame events, no stage required

How does EventDispatcher allocate new instances of your custom events? It calls the clone() method, which you’re supposed to override if you need those clones to be typed as your custom event. The default clone() returns a new Event instance. How about a clone() that didn’t allocate any memory? What if we returned this? […] 7 ms vs. 83 ms That’s right, when you take the new out of dispatchEvent() it becomes 182x faster… 11.8x faster than a callback!

Nicht, dass ich das schon alles geprüft hätte. Erstmal freue ich mich über all solche kleinen Häppchen, die mir neu waren 🙂