• SpryFlashCMS das Flash CMS
  • Flash on the Beach 2010 in Brighton!
  • Adobe User Group
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-02-2010, 13:51   #1 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
Zugriff auf eine Funktion einer geladenen swf

Tag zusammen,

ich verusche nun seit mehreren Stunden auf eine Funktionen einer geladenen swf zuzugreifen...dabei hab ich mich an folgende Tutorials orientiert.
Sobald eine externe swf geladen worden ist (eine bestimmt swf), bekommt der Hauptfilm ne kleine Meldung mit Hilfe eines Events ...(Link 1)..darauf hin versuche ich dann auf eine Funktion des geladenen Swf aufzurufen ...(Link 2)

Aus externer SWF Funktionen im Hauptfilm aufrufen (AS3) | Beautify Code Blog

Auf MovieClips & Funktionen von externen SWFs zugreifen | Beautify Code Blog

ich bekomme aber immer wieder diese Fehlermeldung
PHP-Code:

TypeError
Error #1006: meineFunktion ist keine Funktion.
    
at MethodInfo-363()
    
at flash.events::EventDispatcher/dispatchEventFunction()
    
at flash.events::EventDispatcher/dispatchEvent()
    
at MethodInfo-69() 
die kommunikation von der externen Swf auf den Hauptfilm geht...sprich dass mit dem Event funktionniert es komm nur nicht von dem Hauptfilm auf die Funktions der externen swf.
Wenn ich das richtig verstehe kommt er an die Funktion nicht dran...ich versuch die ganze Zeit schon irgendwie ne Lösung zu finden...steht aber glaub vor einer Sackgase...


Das ganze ist so aufgebaut.

Ich habe im Hautpfilm ein Mc namens contentswf in den wird die swf geladen....

PHP-Code:

var loadit = new Loader();
loadit.load(new URLRequest("underpages/home.swf"));//laden den Home Film
contentswf.addChild(loadit);

function 
mousedrueber_klick(evt:MouseEvent):void
{

evt.currentTarget.addEventListener(Event.ENTER_FRAME,prufe);//Enter_Frame der prüft ob der MC alpha 0 oder alpha 1 ist
                                                            //demnach entscheide ich dann was ich mache

function prufe(e:Event):void//function des Enter_Frame
{      
    
    if(
contentswf.alpha == 0){ // wenn der contentswf = alpha 0 ist ladet er einen Film
                            
                    
        
loadit.load(new URLRequest("underpages/"+e.currentTarget.name+".swf"));//laden den neuen Film
        
                    
        
loadit.contentLoaderInfo.addEventListener(Event.COMPLETEende);//Complete Ereignis
                    
        
e.currentTarget.removeEventListener(Event.ENTER_FRAMEprufe);//löschen des Enter_Frame
                            
        
function ende(evt:Event)//funktion Complete
        
{
            
contentswf.alpha 1;
                        
            
contentswf.addEventListener("start"buttonaktiv);//hier horche ich auf das Event der geladenen swf
                                                              //und führe dann die Funktion aus
            
function buttonaktiv(evt:Event):void
            
{        
                
trace("was geht ab");
                
                
contentswf.meineFunktion();//die Funktion soll später von einenm Buttons gesteuert werden
            
}
                                
            
removeEventListener(Event.COMPLETEende);
                                
        }
    }
    if(
contentswf.alpha == 1){ //wenn content swf alpha = 1 setzt er ihn auf null
        
contentswf.alpha 0;
     }

und hier den Code der geladenen swf
PHP-Code:

var closeEvent:Event = new Event("start"true);// Das Event das das sozusagen das Signal gibt
// dispatched
dispatchEvent(closeEvent);

    

    
    
}

////////////////////////////////////
////////////////////////////////////
////////////////////////////////////

//und hier die Funktion die Eigentlich ausgelöst werden soll
function meineFunktion():void
{
        
trace("hallo");
    
removeChild(galmovie);//hier wird einfach nur ein Mc gelöscht

Vllt kann mir jemand helfen...Dank schon mal...hoffe ich hab es gescheit erklärt

Gruss
Mando

Geändert von Mando (26-02-2010 um 13:58 Uhr)
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 14:32   #2 (Permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.073
was geht ab?
hast du die funktion denn im ersten schlüsselbild deklariert?
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# FDT Speaker
# We ♥ FDT
figure8 ist offline   Mit Zitat antworten
Alt 26-02-2010, 14:55   #3 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
jup funktion ist im ersten schlüsselbild....

bzw ich hab im gesamten film nu ein schlüssenbild...ist alles nur code.

des trace("was geht ab"); .. ist nur ein hinweis für mich das des Event angekommen ist...
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 15:27   #4 (Permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.073
achso, haha. ich sehe, was dein fehler ist. schau mal:

ActionScript:
  1. var _swfLoader:Loader;
  2. var _swfContent:MovieClip;
  3.  
  4. loadSWF("01.swf");
  5.  
  6. function loadSWF(path:String):void {
  7.     var _req:URLRequest = new URLRequest();
  8.     _req.url = path;
  9.  
  10.     _swfLoader = new Loader();
  11.     setupListeners(_swfLoader.contentLoaderInfo);
  12.    
  13.     _swfLoader.load(_req);
  14. }
  15.  
  16. function setupListeners(dispatcher:IEventDispatcher):void {
  17.     dispatcher.addEventListener(Event.COMPLETE, addSWF);
  18.     dispatcher.addEventListener(ProgressEvent.PROGRESS, preloadSWF);
  19. }
  20.  
  21. function preloadSWF(event:ProgressEvent):void {
  22.     var _perc:int = (event.bytesLoaded / event.bytesTotal) * 100;
  23.     // swfPreloader.percentTF.text = _perc + "%";
  24. }
  25.  
  26. function addSWF(event:Event):void {
  27.     event.target.removeEventListener(Event.COMPLETE, addSWF);
  28.     event.target.removeEventListener(ProgressEvent.PROGRESS, preloadSWF);
  29.    
  30.     _swfContent = event.target.content;
  31.     _swfContent.addEventListener("close", unloadSWF);
  32.  
  33.     addChild(_swfContent);
  34. }
  35.  
  36. function unloadSWF(event:Event):void {
  37.     _swfLoader.unloadAndStop();
  38.    
  39.     removeChild(_swfContent);
  40.     _swfContent = null;
  41. }

Quelle

hier wird ein clip namens "_swfContent" erstellt, der sozusagen deine swf ist, weil er mit dem CONTENT des loader-objekts referenziert wird.
du hingegen addest den loader lediglich in einem clip und müsstest, wenn du deinen code nicht ändern willst, das ganze so ansprechen:

ActionScript:
  1. swfcontent.getChildAt(0).content.meineFunktion();

ist natürlich super-uncool, deswegen versuch einfach, mein script-snippet zu benutzen..
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# FDT Speaker
# We ♥ FDT

Geändert von figure8 (26-02-2010 um 15:29 Uhr)
figure8 ist offline   Mit Zitat antworten
Alt 26-02-2010, 15:39   #5 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
ja..hab auch schon überlegt dein script-snippet zu nehmen...müsste das ganze dann halt en weng anpassen da bei mir ja beim klick auf einen button immer ein neues Film eingeladen wird....wollt aber erst mal schauen ob ich es si hinbekomme....
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 15:43   #6 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
Zitat:
Zitat von Mando Beitrag anzeigen
ja..hab auch schon überlegt dein script-snippet zu nehmen...müsste das ganze dann halt en weng anpassen da bei mir ja beim klick auf einen button immer ein neues Film eingeladen wird....wollt aber erst mal schauen ob ich es si hinbekomme....

habs grad versucht ...geht leider nicht
Code:
1061: Aufruf für eine möglicherweise nicht definierte Methode meineFunktion über einen Verweis mit statischem Typ flash.display:DisplayObject.
würd halt erst wenn garnichts mehr geht dein snippet nehmen und umbauen...
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 15:44   #7 (Permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 14.805
z.b.
H.G.Seib
-> AS3_swf_dazuladen
Ein swf dazuladen und dessen Methoden benutzen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2010, 16:01   #8 (Permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.073
aber dein script ist eh total wüst, du kannst nicht wild irgendwelche funktionen verschachteln, verschiedene events irgendwo registrieren und hoffen, dass zur richtigen zeit die richtigen daten / methoden zur verfügung stehen

wegen multiple-swf loading: click (en)!

aber falls du nicht so viel verändern willst bei dir, wirst du nicht drumrum kommen, da ordnung reinzubringen.

// erste swf laden, eventlistener registrieren
// btn-eventlistener registrieren

// beim click auf einen button aktuelle swf runterschmeißen von der bühne (NICHT alpha=0)
// neue swf laden (würde ich anders machen, siehe englischen artikel)
// neue swf adden, dann funktion ausführen

momentan weißt du garnicht, was genau dein loader gerade drin hat, es kann ja sein, dass die alte noch garnicht geladen war, als du gedrückt hast.

falls du immernoch nicht weiterkommst, einfach bescheidgeben und am besten die fla's hochladen oder den gesamten code zeigen.
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# FDT Speaker
# We ♥ FDT
figure8 ist offline   Mit Zitat antworten
Alt 26-02-2010, 16:38   #9 (Permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Kalifornien
Beiträge: 234
Ich verstehe nicht, warum du solch ein kompliziertes Script machst. Dies funktioniert.

var loadit = new Loader();
loadit.load (new URLRequest("underpages/home.swf"));
contentswf.addChild (loadit);
loadit.contentLoaderInfo.addEventListener (Event.COMPLETE, ende);
function ende (evt:Event):void
{
trace("ENDE");
var l:Object = evt.currentTarget.content;
l.meineFunktion ();
}
__________________
Es war schon immer etwas teurer, einen guten Flash Film zu machen.
www.flashscript.biz
cancerinform ist offline   Mit Zitat antworten
Alt 26-02-2010, 16:56   #10 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
cancerinform ich hab ne leere datei genommen und das von dir ausprobiert..und es geht einwandfrei nur wenn ich es in mein script einbaue eben nicht...
kommt immer diese Fehlermeldung
Code:
ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein.
	at flash.display::DisplayObjectContainer/removeChild()
	at gallery_fla::MainTimeline/testas()
	at MethodInfo-363()
ist jetzt auch nicht weiter tragisch ich mache jetzt erst mal des war mir figure8 empfohlen..ich will nicht irgendetwas gefuschtest zusammen coden...sonder was gescheiten was dann auch funkt...mach mich jetzt gleich mal dran..meld mich dann ...vielen Dank nochmal für eure Antworten....
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 17:03   #11 (Permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Kalifornien
Beiträge: 234
Dein Problem liegt vermutlich hier:
removeChild(galmovie);

Ich wuerde den Movie mal alleine ausprobieren mit dieser Zeile nur und das klaeren. Ich weiss nicht wo galmovie liegt oder was das ist.
__________________
Es war schon immer etwas teurer, einen guten Flash Film zu machen.
www.flashscript.biz
cancerinform ist offline   Mit Zitat antworten
Alt 26-02-2010, 17:14   #12 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 53
galmovie liegt in der externen swf...also die die in dem Hauptfilm gealden wird...
habs grad mal ausgeklammert und es funktioniert....aber nur so lange ich das Event weg lassen....

Code:
contentswf.addEventListener("start", buttonaktiv);//hier horche ich auf das Event der geladenen swf
                                                              //und führe dann die Funktion aus
            function buttonaktiv(evt:Event):void
            {        
                trace("was geht ab");
                
               index.closeas.alpha = 1;
	       var l:Object = evt.currentTarget.content;
	       l.testas();
      
            }
dann spuckt er das aus

TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at MethodInfo-363()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at MethodInfo-70()
Mando ist offline   Mit Zitat antworten
Alt 26-02-2010, 17:23   #13 (Permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Kalifornien
Beiträge: 234
Dann teste jetzt deinen geladenen Movie alleine mit nur einer Zeile
removeChild(galmovie);
und finde den richtigen path, um galmovie zu entfernen.

Uebrigens brauchst du keine Eventdispatcher in dem geladenen Movie, da der COMPLETE Event in Verbindung mit dem Loader Object nur dann getriggert wird, wenn der Movie geladen ist und daher der Event ausreicht.
__________________
Es war schon immer etwas teurer, einen guten Flash Film zu machen.
www.flashscript.biz

Geändert von cancerinform (26-02-2010 um 17:25 Uhr)
cancerinform ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
externe swf, fehler, funktion

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eine Funktion aus einer anderen Komponente aufrufen - wie? fabbsen Flex programmieren 3 16-07-2009 16:48
für jedes Element in einer XML eine Funktion ausführen Fellkneul ActionScript 3 8 01-07-2008 13:11
Zugriff auf MovieClip einer geladenen swf HorizontLaeufer ActionScript 3 2 01-12-2007 16:51
zugriff auf eine funktion in dokumentenklasse hobbit20001 ActionScript 3 1 24-07-2007 14:08
Zugriff auf Methoden einer über loadMovie geladenen .swf-Datei andbub ActionScript 1 10 22-08-2004 20:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 Uhr.

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


Copyright ©1999 – 2010 Marc Thiele und Sascha Wolter.