2011-03-12 2 views
1

Hail, Stack!Incorporation/importation de SWC à la compilation dans ActionScript, sans définition d'un chemin de bibliothèque

J'ai un peu de mal à comprendre comment importer un fichier SWC directement dans ActionScript, sans définir de chemin d'accès au fichier.

Pour donner un exemple, je besoin de quelque chose comme ceci:

package 
{ 
    [Embed(source = 'Library.swc')] // This line won't work, of course... 

    import ClassInsideSWC; 

    public class MyClass extends ClassInsideSWC 
    { 
     public function MyClass() 
     { 
      super(); 
     } 
    } 
} 

D'ailleurs, je ne veux pas (je ne peux pas, en fait) importer le SWC en le chargeant avec Loader classe.

Eh bien, quelqu'un connaît un moyen de se connecter au SWC en utilisant uniquement du code ActionScript?


Edité

Juste pour ajouter plus d'informations sur le problème, je vais présenter mon scénario avec plus de détails ...

J'ai une classe SubClass moul être indépendant du reste. Il va étendre une classe SuperClass qui est à l'intérieur du SWC/SWF ...

Ces SWC/SWF ont tout le cadre. Je ne peux pas compiler toutes les classes d'un même fichier SWF. Chaque partie de mon framework est séparée par un fichier SWF et sera téléchargée par la classe Loader à l'exécution.

Malheureusement, la réponse @frankhermes ne fonctionnera pas. Cette méthode ne téléchargera pas les classes et ne me permettra pas d'étendre ou d'utiliser d'autres classes dans le fichier SWC.

Si la configuration I le chemin de la bibliothèque cela devient possible ...

Répondre

3

Une correction possible sur la réponse de Sean Fujiwara:

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")] 
public var SWC:Class; 

faudra peut-être:

[Embed(source="SWFWireDecompiler.swf", symbol="ClassInSWC")] 
public class ClassInSWC 
{ 
    .... 
} 

EDIT: comme suivi après le commentaires, ceci est une autre tentative d'obtenir une réponse acceptable:

package 
{ 
    import flash.display.Sprite; 

    public class SWCTest extends Sprite 
    { 
     public function SWCTest() 
     { 
      var extended:ExtendedCrumbs = new ExtendedCrumbs(); 
     } 
    } 

} 

[Embed(source="../swfs/assets.swf", symbol="assets.Crumbs")] 
class CrumbsInSWC 
{ 

} 

class ExtendedCrumbs extends CrumbsInSWC 
{ 
    public function ExtendedCrumbs() 
    { 
     super(); 
    } 

    // override something here 
} 

Malheureusement, il ne fonctionne qu'avec des fichiers swf, pas des années swc parce que vous ne pouvez pas utiliser symbol="..." dans les déclarations Embed lorsque vous utilisez un SWC. Mais le code ci-dessus compile. Placez le fichier swf n'importe où dans votre projet et ajustez le chemin source dans l'instruction Embed.

Espérons que cela vous sert toujours! Frank

+0

@Sean et @frank, merci les deux, mais je ne pense pas que la balise Embed fonctionnera en dehors d'une définition de classe. Je ne peux pas le mettre dans ma classe parce que j'ai besoin d'étendre une classe qui est à l'intérieur du SWC ... – NemoStein

+0

Cela [..] et la classe en dessous fonctionne. Et une fois que vous avez cette classe, vous pouvez l'étendre dans une autre classe. Le fichier .swc doit cependant être dans votre projet quelque part, au moment de la compilation. Donc, le mettre pratiquement dans votre bibliothèque sera beaucoup plus facile. Pourquoi ne peux-tu pas faire ça? – frankhermes

+0

@frankhermes - Parce que je suis en train de développer une sorte de cadre, et le contenu sera créé par des gens ... Peut-être des gens stupides ... Peut-être, stupide comme une porte! Par conséquent, je ne peux pas enseigner à chaque porte pour ajouter des SWC dans le chemin de la bibliothèque ... ps: Si vous pouvez le faire fonctionner, s'il vous plaît, créez un fichier .as et répondez à la question avec. Je serai heureux d'accepter comme correct si cela fonctionne ... – NemoStein

0

Pourquoi dites-vous « Cette ligne ne fonctionne pas, bien sûr ... »? Vous avez presque raison, il vous manque juste quelques petites choses.

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")] 
public var SWC:Class; 

Ensuite, vous pouvez transformer obtenir les données comme ByteArray:

var data:ByteArray = new SWC(); 
Questions connexes