• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-01-2007, 20:06   #1 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
SWFLoader - geladenes swf ansprechen

Ich benutze den SWFLoader zum nachladen eines SWFs.

<mx:SWFLoader id="outputLoader" source="" height="540" width="340" x="10"
y="10" autoLoad="false" />

wie kann ich jetzt bei erfolgtem Laden das swf mit stop() anhalten ?

outputLoader.content ist ja vom Typ DisplayObject und verfügt somit nicht über stop()

viele Grüße
zerlettino ist offline   Mit Zitat antworten
Alt 14-01-2007, 21:48   #2 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Hast du das schon probiert?

MovieClip( outputLoader.content ).stop();
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 14-01-2007, 22:41   #3 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
geht leider nicht:
Typumwandlung fehlgeschlagen: flash.display::AVM1Movie@1069b89 kann nicht in flash.display.MovieClip umgewandelt werden.

hab leider keine Ahnung wie ich das swf sonst als MovieClip casten könnte.
zerlettino ist offline   Mit Zitat antworten
Alt 15-01-2007, 02:25   #4 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Die SWF die du laden möchtest ist <= Flash 8, ja? Dann kannst du eine einfache Methode zur Kommunikation schon einmal vergessen.

Zwei Methoden, wie Flash 9 mit Flash 8 kommunizieren kann:
- External Interface
- Local Connection
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 15-01-2007, 09:33   #5 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
das hatte ich schon befürchtet dass ich es mit LocalConnection machen muss.
Das Problem ist nur, dass ich keinen Code in das swf bauen kann- es handelt sich lediglich um ein swf mit mehreren Frames ohne Code das automatisch generiert wird.

viele Grüße
zerlettino ist offline   Mit Zitat antworten
Alt 15-01-2007, 10:22   #6 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Wenn in der SWF kein Code vorkommt, kannst du eine Flash 9 SWF daraus generieren.

Code:
  [Embed(source='flash8.swf')]
  private var swf: Class;
  private var clip: MovieClip;
Code:
 clip = MovieClip( new swf );
 clip.stop();
 addChild( clip );
(Selbstverständlich kannst du die auch nachladen, nur würde ich so zuerst testen)
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 15-01-2007, 15:33   #7 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
mit embed funktioniert es soweit, allerdings brauche ich es
dynamisch zur Laufzeit - ich habe das mal mit dieser Klasse getestet.
Das funktioniert auch soweit, allerdings kann ich keinen MovieClip aus dem DisplayObject machen. Das ist aber nötig, weil ich das swf auf versch. Frames schicken muss -
nervige Sache das

PHP-Code:
package {

    
import flash.display.Loader;
    
import flash.display.LoaderInfo;
    
import flash.display.Sprite;
    
import flash.events.Event;
    
import flash.net.URLLoader;
    
import flash.net.URLLoaderDataFormat;
    
import flash.net.URLRequest;
    
import flash.utils.ByteArray;
    
import flash.display.MovieClip;
    
    public class 
Main extends Sprite {
        
        private var 
mc:MovieClip;
    
        public function 
Main():void
        
{
        
            var 
convertMovie:Boolean true;
            
            var 
request:URLRequest = new URLRequest("output.swf")
            
            if (
convertMovie) {
            
                var 
urlloader:URLLoader = new URLLoader();
                
urlloader.dataFormat URLLoaderDataFormat.BINARY;
                
urlloader.addEventListener(Event.COMPLETE_convertF8Movie);
                
urlloader.load(request);
            
            } else {
            
                var 
loader:Loader = new Loader();
                
loader.contentLoaderInfo.addEventListener(Event.COMPLETE_onLoaderComplete);
                
loader.load(request);
                
addChild(loader);
            
            }
    
        }
    
        private function 
_convertF8Movie(event:Event):void {
        
            var 
urlloader:URLLoader event.currentTarget as URLLoader;
            var 
f8bytes:ByteArray urlloader.data;
            
            
// set version — not necessary
            //f8bytes[3] = 9;
            
            // no idea what this byte does, but it’s important
            
f8bytes[22] = 8;
            
            var 
loader:Loader = new Loader();
            
loader.contentLoaderInfo.addEventListener(Event.COMPLETE_onLoaderComplete);
            
loader.loadBytes(f8bytes);
            
addChild(loader);
        
        }
        
        private function 
_onLoaderComplete(event:Event):void {
        
            var 
info:LoaderInfo event.target as LoaderInfo;
            
trace(info.content);
            
            
MovieClip (info.content).stop();
// Fehler: TypeError: Error #1034: Typumwandlung fehlgeschlagen: flash.display::AVM1Movie@fbd6a9 kann nicht in flash.display.MovieClip umgewandelt werden.
        
        
}

    }

zerlettino ist offline   Mit Zitat antworten
Alt 15-01-2007, 17:38   #8 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Kannst du nicht deine Flash 8 Dateien vorher in Flash 9 konvertieren und dann (zur Laufzeit) laden?

Funktioniert für mich sehr gut. Ich habe meine kleines Library Projek und lade dann die SWF.

Asset(s) definieren:
Code:
package
{
	import flash.display.Sprite;
	
	public class Library extends Sprite
	{
		[Embed(source='/assets/test.swf#Clip')]
		static public const beispiel: Class;
	}
}
Asset erstellen:
Code:
var clazz: Object;
var clip: MovieClip;

try {
  clazz = loader.contentLoaderInfo.applicationDomain.getDefinition( 'Library' );
}
catch( err: Error ) { trace( err.toString() ); }
	
try {
  clip = MovieClip( new clazz[ 'beispiel' ] );
}
catch ( err: Error ) { trace( err.toString() ); }
Für die Assets musst du beachten, dass du sie in eine andere ApplicationDomain lädst.

Code:
loader.load( new URLRequest( 'Library.swf' ), new LoaderContext( false, new ApplicationDomain ) );
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 15-01-2007, 22:50   #9 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
geht leider nicht, da die swfs mit den swftools erstellt werden und ich dort zwar flash 9 als version angeben kann, das swf aber trotzdem als AVM1 Movie entlarvt wird.
Jetzt muss ich wohl eine Art wrapper basteln der dann über LocalConnection mit der Flex App kommuniziert.

Ich hatte mir halt vorgestellt, dass ich das Asset irgendwie als MovieClip aus dem Bytearray extrahiert bekomme. (So ähnlich wie Andre Soundassets aus dynamisch befüllten swfs zieht)
LocalConnection ist für mich an der Stelle leider nur ein dirty Hack.

viele Grüße
zerlettino ist offline   Mit Zitat antworten
Alt 26-10-2007, 00:06   #10 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.297
AVM1 zu AVM2

Ich weiß der Thread is schon älter, aber für alle die nach einer Lösung hierfür suchen:
- http://labs.hellokeita.com/category/avm1/
- http://code.hellokeita.in/public/tru.../AVM1Loader.as

anzuwenden ganz einfach:

PHP-Code:
// import AVM1 Loader (converts AVM1 swf`s to AVM2)
import jp.imgsrc.keita.net.AVM1Loader;

function 
loadingCompletee:Event null ):void
{
    
e.target.content.gotoAndStop(1);
    
this.stage.addChild(e.target.content);
}

// pdf_multi_page.swf.swf ... generated by swfTools (native version 6)
var url:URLRequest = new URLRequest("pdf_multi_page.swf");
var 
loader:AVM1Loader = new AVM1Loader();
loader.addEventListenerEvent.COMPLETEloadingComplete );
loader.load(url); 
Funktioniert 1A mit z.B. swfTools erzeugten files (www.swftools.org).

n8 allerseits
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (26-10-2007 um 00:22 Uhr)
_geo_ 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 01:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele