[ascoders] AW: AW: AW: Re: AW: Re: AW: String in Klassenreferenz umwandeln?

  • From: Timo Hölzer <timo@xxxxxxxxxxxxxxxxx>
  • To: <ascoders@xxxxxxxxxxxxx>
  • Date: Tue, 12 Jun 2007 15:48:00 +0200

Hi Peter,

Das VideoObject direkt attachen, geht nach dem was mir bekannt ist
wirklich nicht.

Ich habe mir zu diesem Zweck eine VideoClip Komponente geschrieben,
die ich bei entsprechenden Projekten über eine SharedLibrary allen
Scopes der swf zur Verfügung stelle.

Diese ist eine Subclass von MovieClip. Die Komponente beinhaltet
ein VideoObject. Zusätzlich hab ich das Handling (NetStream, etc.)
in die Komponenten Klasse implementiert und die Möglichkeit vorgesehen
einen externen Controller zu verknüpfen, der über definierte Events
das Playback des Movies steuert.

Das funktioniert schon ziemlich komfortabel.

Die FLVPlayback und die anderen Komponenten nutze ich eher selten,
weil ich das Framework dahinter einfach zu "fett" finde.

Gruß
Timo



-----Ursprüngliche Nachricht-----
Von: ascoders-bounce@xxxxxxxxxxxxx
[mailto:ascoders-bounce@xxxxxxxxxxxxx]Im Auftrag von Peter
Gesendet: Dienstag, 12. Juni 2007 11:03
An: ascoders@xxxxxxxxxxxxx
Betreff: [ascoders] AW: AW: Re: AW: Re: AW: String in Klassenreferenz
umwandeln?


Das ist super,

vor allem habe ich dann die Blenden nicht im Constructor vom View rumfliegen
und ich kann die Library ebenfalls Abfragen welche Animationen vorhanden
sind. So finde ich es auf jedenfall noch sauberer. Mal sehen wie ich in
einem halben Jahr oder so da durchsteige... Momentan ist es zumindest kein
Problem.

Noch ne dämliche Frage? Muss man eigentlich um ein Videoobjekt aus einer
Klasse heraus aufzurufen und zu setzen (auf die Bühne) immer nur mit
Komponenten arbeiten? Bisher kenne ich nur die Methode Videoobjekt erstellen
und direkt in einen Film verschachteln und diesen aus der Lib in die Bühne
attachen. Oder ne Komponente entwickeln und die Komponente per
createClassObject setzen. Das Videoobjekt selber kann man nämlich nicht auf
die Bühne attachen. Wie gesagt vielleicht nutze ich jetzt auch erstmal die
FLVPlayback Komponente die sieht ja ziemlich ausgereift aus.

Grüße und danke

Peter


-----Ursprüngliche Nachricht-----
Von: ascoders-bounce@xxxxxxxxxxxxx [mailto:ascoders-bounce@xxxxxxxxxxxxx] Im
Auftrag von Timo Hölzer
Gesendet: Dienstag, 12. Juni 2007 09:21
An: ascoders@xxxxxxxxxxxxx
Betreff: [ascoders] AW: Re: AW: Re: AW: String in Klassenreferenz umwandeln?

Hallo Peter, hallo Martin,


ich erlaube mir mal mich einzuklinken.
Ich hatte vor kurzem ein ähnliches Problem.
Allerdings läßt isch das noch ne ganze Ecke eleganter lösen,
denn "eval is wirklich evil" ;-)



Ein kleines Beispiel findet ihr hier:
http://timo.md1005.de/exchange/peter.zip


hier aber schon mal der Code:


StrongTransition.as
======================================================================
class classes.StrongTransition {

      static function showClip(){
                        trace("ZEIG MICH")
      }
}
======================================================================


NotSoStrongTransition.as
======================================================================
class classes.NotSoStrongTransition {

      static function showClip(){
                        trace("ZEIG MICH NOT SO STRONG");
      }
}
======================================================================

Da Du sowieso nur die statische(n) Methode(n) nutzen möchtest,
kannst Du dir den Kontstruktor sparen.





TransitionLibrary.as
======================================================================
class classes.TransitionLibrary {

          private static var StrongTransition:Function =
classes.StrongTransition;
          private static var NotSoStrongTransition:Function =
classes.NotSoStrongTransition;

}
======================================================================

Die Trasitions in statischen Variablen eines Library Klasse zu speichern,
zwingt den Kompiler die enthaltenen Trasitions auch in die swf zu
kompilieren





View.as
======================================================================
class classes.View {

        function View(){};

        public function showClip(className:String) {
        classes.TransitionLibrary[className].showClip();
        }
 }
======================================================================
Die View greift dann auf die TransitionLibrary zu und kann so anhand
eines übergebenen Strings eine Transition verwenden.




FLA
======================================================================
import classes.View

var myView:View = new View()
myView.showClip("StrongTransition")
myView.showClip("NotSoStrongTransition")
======================================================================






Gruß aus Berlin
Timo H.





-----Ursprüngliche Nachricht-----
Von: ascoders-bounce@xxxxxxxxxxxxx
[mailto:ascoders-bounce@xxxxxxxxxxxxx]Im Auftrag von Martin Bücker
Gesendet: Sonntag, 10. Juni 2007 23:38
An: ascoders@xxxxxxxxxxxxx
Betreff: [ascoders] Re: AW: Re: AW: String in Klassenreferenz umwandeln?


Hallo Peter,

warum man den kompletten Paketpfad trotz import-Anweisung zur Klasse
angeben muss, kann ich Dir auch nicht sagen. Da musst Du mal bei Adobe
nachfragen ;)

Die eval-Funktion sollte man immer mit Bedacht einsetzen, obwohl man
damit nicht so evil sein kann wie unter Javascript. Aber wenn es
nützlich ist ... warum nicht?!

Ansonsten solltest Du Dir vielleicht Gedanken über Dein
Applikationsdesign machen, ggf. gibt es ja eine bessere Lösung, die ohne
eval auskommt.

Gruß
Martin


Peter schrieb:
> Super,
>
> So funktionierts, wichtig ist definitive der Klassenpfad, warum kann ich
> nicht sagen da ja normalerweise die Beziehung durch die Importanweisung
> hergestellt wird. Damit die Klasse vom Compiler auch eingebunden wird habe
> ich im Constructor einen inititlaisierungsaufruf auf die Klasse
geschrieben.
> Was Du mit einem nochmaligen Import meinst hab ich nicht richtig
verstanden,
> funktioniert so aber auch.
>
> Danke
>
> Peter
>
> Ps: Sagt man nicht immer eval is evil ;]
> Ein paar Freunde von mir meinten mit eval strings in Klassen umwandeln
hört
> sich dreckig an, aber ich wüsste sonst nicht wie ich Animationsarten
> (Klassen) per XML sonst übergeben könnte :] Eigentlich siehts nämlich
> relativ sauber aus.
>
> -----Ursprüngliche Nachricht-----
> Von: ascoders-bounce@xxxxxxxxxxxxx [mailto:ascoders-bounce@xxxxxxxxxxxxx]
Im
> Auftrag von Martin Bücker
> Gesendet: Samstag, 9. Juni 2007 22:36
> An: ascoders@xxxxxxxxxxxxx
> Betreff: [ascoders] Re: AW: String in Klassenreferenz umwandeln?
>
> Hallo Peter!
>
> Probiere es mal mit eval unter Angabe des kompletten Paketpfades.
>
> Also so:
> ------------
> import classes.StrongTransition;
> class classes.View {
>       function View(){}
>       public function showClip(className:String) {
>                  classRef = eval("classes." + className);
>               classRef.showClip();
>       }
> }
> ------------
>
> Wichtig ist, dass Du die dynamisch angesprochenen Klassen, falls Sie
> ausschließlich dynamisch angesprochen werden, in der FLA vor dem Starten
> deines Hauptprogramms irgendwie ansprichst, damit der Compiler diese
> einbindet. Z.B. durch erneutes importieren mit:
> import classes.StrongTransition;
>
> Gruß
> Martin
>
>
> Peter schrieb:
>> Ich habs jetzt erstmal ziemlich dämlich gelöst und zwar so
>>
>>
>>
>>             public function showClip(evtObj:Object) {
>>
>>                         // Führt eigentlich dann die Blendenanimation
>> aus um den neuen Clip darzustellen.
>>
>>                                     switch (evtObj.parameters.ani) {
>>
>>                                                 case "StrongTransition":
>>
>>
>> trace(StrongTransition.showClip());
>>
>>                                                             break;
>>
>>                                     }
>>
>>             }
>>
>>
>>
>> Trotzdem würde mich es riesig freuen wenn mir einer sagen kann wie ich
>> die Klasse direkt aufrufen kann.
>>
>> Ich hatte ja gehofft das es gehen könnte
>> this[evtObj.parameters.ani].showClip()
>>
>>
>>
>> Bin mal gespannt ob sich noch jemand dazu meldet!
>>
>>
>>
>> Grüße aus Köln
>>
>>
>>
>> Peter
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> *Von:* ascoders-bounce@xxxxxxxxxxxxx
>> [mailto:ascoders-bounce@xxxxxxxxxxxxx] *Im Auftrag von *Peter
>> *Gesendet:* Samstag, 9. Juni 2007 14:44
>> *An:* ascoders@xxxxxxxxxxxxx
>> *Betreff:* [ascoders] String in Klassenreferenz umwandeln?
>>
>>
>>
>> Hi Zusammen,
>>
>>
>>
>> gibt es eine Möglichkeit eine von mir statische Klasse innerhalb einer
>> anderen Klasse als String zu übergeben und dann den übergebenen String
>> als Klasse aufzurufen?
>>
>> Wenn ich nämlich im View die Klasse direkt eingebe funktioniert es,
>> kommt der Klassenname aber als String bin ich nicht in der Lage durch
>> eval oder andere Möglichkeiten diesen String wieder in eine
>> Klassenreferenz oder einen Klassennamen umzuwandeln.
>>
>>
>>
>> Gibt es da irgendeine Möglichkeit, da ich der Klasse gerne andere
>> Klassen anhand von einem XML Dokument übergeben würde?
>>
>>
>>
>>
>>
>> Grüße Peter
>>
>>
>>
>> Ps. Im Netz habe ich nur ein paar Beispiele wie z.B.
>> getClassPathByString oder so gefunden aber da bekomme ich bei der
>> Ausgabe immer nur ein undefined.
>>
>> Und mit dem UIObject.createObject komme ich glaube ich auch nicht weiter
>> da es ja nur für Komponenten von Flash ist, oder?
>>
>>
>>
>> Simples Beispiel?
>>
>>
>>
>> // Die statische Klasse
>>
>>
>>
>> class classes.StrongTransition {
>>
>>             function StrongTransition(){}
>>
>>
>>
>>             static function showClip() {
>>
>>                         trace("ZEIG MICH");
>>
>>             }
>>
>>
>>
>> }
>>
>>
>>
>>
>>
>>
>>
>> // Die Klasse die ausführen soll
>>
>> import classe.StrongTransition;
>>
>>
>>
>> class classes.View {
>>
>>
>>
>> function View(){}
>>
>>
>>
>> //Im String wird die statische Klasse übergeben ?StrongTransition?
>>
>> public function showClip(test:String) {
>>
>>             var class = test;
>>
>>             class.showClip();
>>
>> }
>>
>>
>>
>>
>>
> --------------------------------------------------------------
> Archiv   : //www.freelists.org/archives/ascoders/
> RSS      : //www.freelists.org/archives/ascoders/feed.rss
> Optionen : //www.freelists.org/list/ascoders
> --------------------------------------------------------------
>
> --------------------------------------------------------------
> Archiv   : //www.freelists.org/archives/ascoders/
> RSS      : //www.freelists.org/archives/ascoders/feed.rss
> Optionen : //www.freelists.org/list/ascoders
> --------------------------------------------------------------
--------------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
RSS      : //www.freelists.org/archives/ascoders/feed.rss
Optionen : //www.freelists.org/list/ascoders
--------------------------------------------------------------

--------------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
RSS      : //www.freelists.org/archives/ascoders/feed.rss
Optionen : //www.freelists.org/list/ascoders
--------------------------------------------------------------

--------------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
RSS      : //www.freelists.org/archives/ascoders/feed.rss
Optionen : //www.freelists.org/list/ascoders
--------------------------------------------------------------

--------------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
RSS      : //www.freelists.org/archives/ascoders/feed.rss
Optionen : //www.freelists.org/list/ascoders
--------------------------------------------------------------

Other related posts:

  • » [ascoders] AW: AW: AW: Re: AW: Re: AW: String in Klassenreferenz umwandeln?