Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-02-2009, 13:50   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2008
Beiträge: 35
Bilbliothek einer SWF als Container für Bilder in AS3 - Projekt nutzen

Nachdem ich stundenlang im Netz gesucht hab und dann nochmal stundenlang gebastelt, hab ich jetzt endlich geschafft. Ich nutze eine *.swf als Container für alle Bilder, die ich in meinem Projekt brauche.
Das zahlt sich aus bei der Umsetzung eines Ladebalkens, vereinfacht aber auch die Handhabung der Bilder.

Und so läufts:
Ein Bild wird in die Flash-Bibliothek gezogen und in einen MovieClip konvertiert - dem MovieClip gebe ich den Namen, den ich auch später in meinem ActionScript Projekt verwenden möchte. Bei Bildreihen bietet es sich zB an die MovieClips "B1", "B2", "B[n]" zu nennen - man kann diese dann später wunderbar durch eine Schleife ansprechen ...

Die Klasse, mit der geladen wird sieht folgendermaßen aus:
Ich möchte hier den MovieClip "B1" ansprechen, muss aber zuvor die komplette *.swf laden.
PHP-Code:
package {

    
import flash.display.Sprite;
    
import flash.events.*;
    
import flash.utils.Timer;
    
    public class 
My_Loader extends Sprite
    
{
        private var 
timer:Timer = new Timer(1000,1);
        
        public function 
Carcassonne_Loader()
        {
            
InternalLoader.init();
            
timer.addEventListener(TimerEvent.TIMER_COMPLETE, function onComplete():void
            
{
                
timer.reset();
                if(
InternalLoader.inited){
                    if(
InternalLoader.getDefinition("B1") == null) return;
                    
addChild(InternalLoader.getInstance("B1"));
                } 
                
timer.start();
            });
            
timer.start();
        }
    } 
Der InternalLoader ist einfach eine interne Klasse, in der die *.swf geladen wird und die Methoden zur Abfrage zur Verfügung stellt:
PHP-Code:
import flash.events.Event;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
    
class 
InternalLoader 
{
    private static var 
loader:Loader;

    public static function 
init():void 
    
{
        
loader = new Loader();
        
loader.load(new URLRequest("graphics.swf"));
    }

    public static function 
get inited():Boolean 
    
{
        return (
loader.content != null);
    }
    
    public static function 
getInstance(className:String):DisplayObject 
    
{
        var 
SymbolClass:Class = getDefinition(className);
        return (
SymbolClass) ? new SymbolClass() : null;
    }
        
    public static function 
getDefinition(className:String):Class 
    {
        try {
            return (
inited) ? loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class : null;
           } catch (
e:Error) {
            
trace("ERROR");
        }
        return 
null;
    }
}
// package end 
Ein Blog, gefunden im Netz hat, hat mir bei der Umsetzung besonders geholfen - die URL habe ich gerade nicht dabei (bin unterwegs). Werde den Link aber evtl. noch heute Abend zur Verfügung stellen.

URL von Grants FlashLib Block: http://www.gskinner.com/blog/archive...flash_sym.html ... Thanks a lot, Grant!

Viel Spass beim ausprobieren.

Gruß
das_stoffel

Geändert von das_stoffel (05-02-2009 um 20:23 Uhr)
das_stoffel ist offline   Mit Zitat antworten
Alt 09-02-2009, 08:04   #2 (permalink)
QuickScope
 
Benutzerbild von jaygroove
 
Registriert seit: May 2004
Ort: Upper Austria
Beiträge: 256
danke für deinen beitrag!
mir ist allerdings nicht ganz klar, was mir das erleichtern sollte?
ich hab sowas ähnliches gebastelt aber dazu brauch ich keine InternalLoader klasse..
was bewirkst du eigentlich mit dem timer?
normalerweise hat man da ja im loader einen Event.COMPLETE listener..
jaygroove ist offline   Mit Zitat antworten
Alt 09-02-2009, 11:16   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2008
Beiträge: 35
... recht hast du, ich hab sofort das erste funktionierende Ergebnis hier hinein gestellt. Der Timer ist noch ein Überbleibsel, InternalLoader braucht man auch nicht ...

Nen nettes CodeBeispiel isses ja trotzdem

Greetz
das_stoffel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele