2009-03-13 5 views
1

Je suis en train d'étendre Loader(), est-il possible de dessiner une bordure autour du contenu sans avoir recours à certains hacks? Je comprends que Loader ne peut pas avoir d'enfants supplémentaires, sinon je voudrais juste créer une forme à la taille du contenu et l'ajouter. Mais existe-t-il un moyen de contraindre ou de lancer l'objet de contenu pour utiliser l'API de dessin?AS3: Extension de chargeur, comment dessiner des frontières sur son contenu

Répondre

5

Généralement, vous suffit d'ajouter le contenu à un objet d'affichage quand il est chargé et le manipuler autant que vous voulez:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventCompleteHandler); 
loader.load(new URLRequest(URL)); 

function eventCompleteHandler(event:Event):void 
{ 
    addChild(createElementWithBorder(event.target.content)); 
} 

function createElementWithBorder(content:DisplayObject):DisplayObject 
{ 
    var container:Sprite = new Sprite(); 

    container.addChild(content); 

    var border:Shape = container.addChild(new Shape()) as Shape; 
    border.graphics.lineStyle(2,0x000000); 
    border.graphics.drawRect(0, 0, content.width,content.height); 

    return container; 
} 

... Mais si vous vous pouvez toujours ennuyé pas utiliser le chargeur comme DisplayObjectContainer, USI composition ng peut être l'indice (ce qui suit est juste un exemple rapide et doit être accommodé bien sûr):

public class LoaderBorder extends Sprite 
{ 

    private var loader:Loader; 

    public function LoaderBorder() 
    { 
     loader = new Loader() 
    } 

    public function load(url:String):void 
    { 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventCompleteHandler); 
     loader.load(new URLRequest(url)); 
    } 

    private function eventCompleteHandler(event:Event):void 
    { 
     loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, eventCompleteHandler); 

     var content:DisplayObject = event.target.content; 

     var border:Shape = new Shape(); 
     border.graphics.lineStyle(2,0x000000); 
     border.graphics.drawRect(0, 0, content.width,content.height); 

     addChild(content); 
     addChild(border); 

    } 
} 

A utiliser comme un chargeur:

var test:LoaderBorder = new LoaderBorder() 
addChild(test); 
test.load(URL);  
+0

oui, avant de voir votre message c'est ce que j'ai fini par faire. merci – Ronn

+0

la route de composition qui est – Ronn

+0

cool, oui, il est généralement bon quand vous voulez combiner les avantages/fonctionnalités de plusieurs types dans une seule implémentation. –

0

Oui, vous pouvez CAST le contenu du chargeur. Lorsque vous chargez une image que vous pouvez faire (après que l'image est complètement chargée):

Bitmap(yourLoader.content); 

Et avec un fichier SWF, je suppose que vous pouvez le faire (ont pas testé):

Sprite(yourLoader.content); 
0

Vous pouvez ajouter un filtre à le MovieClip qui contient le chargeur.

Je pense que "lueur" ou "ombre portée" pourrait être un bon effet pour cela. Si vous le définissez correctement.

Questions connexes