Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-05-2007, 05:45   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 293
mit MovieClipLoader Bild laden!!

ich versuche in einer Klasse mit dem MovieClipLoader ein Bild zu laden...ich habs nicht hinbekommen:
Was stimmt nicht an folgendem Code?

class createPicture extends MovieClip {

static var container:MovieClip;

function createPicture(){
_root.createEmptyMovieClip("container",_root.getNe xtHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var lauscher:Object=new Object();
lauscher.onLoadInit=function(ziel_mc){
ziel_mc._width=500;
ziel_mc._height=300;
}
mcLoader.addListener(lauscher);
mcLoader.loadClip("./images/bild2.jpg",container);

}
}
__________________
www.media-mania.at
katimp ist offline   Mit Zitat antworten
Alt 12-05-2007, 10:09   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Hier mal ein etwas ausführlicherer Ansatz:
ActionScript:
  1. /** */
  2. class MyMovieClip extends MovieClip {
  3.     /** */
  4.     private var content:MovieClip;
  5.     /** */
  6.     private var mymoviecliploader:MyMovieClipLoader;
  7.     /** */
  8.     private var url:String;
  9.     /** */
  10.     public function MyMovieClip() {
  11.         //super();
  12.         trace("class MyMovieClip: constructor");
  13.         this.mymoviecliploader = new MyMovieClipLoader();      
  14.         if (url != undefined) {
  15.             this.url = url;
  16.             this.buildContent();
  17.         }
  18.     }
  19.     /** */
  20.     public function onLoad() {
  21.         trace("class MyMovieClip: listener onLoad");
  22.         this._visible = false;
  23.     }
  24.     /** */
  25.     public function buildContent():Void {
  26.         trace("class MyMovieClip: function buildContent");
  27.         this.content = this.createEmptyMovieClip("content", this.getNextHighestDepth());
  28.         this.mymoviecliploader.loadClip2Target(this.url, this.content);
  29.     }
  30.     /** */
  31.     public function show():Void {
  32.         trace("class MyMovieClip: function show");
  33.         this._visible = true;
  34.     }
  35. }
ActionScript:
  1. /** */
  2. class MyMovieClipLoader extends MovieClipLoader {
  3.    
  4.     /** */
  5.     public function MyMovieClipLoader() {
  6.         trace("class MyMovieClip: constructor");
  7.         super();
  8.     }
  9.     /** */
  10.     public function loadClip2Target(url:String, target:MovieClip) {
  11.         trace("class MyMovieClipLoader: function loadClip2Target");
  12.         this.loadClip(url, target);
  13.     }
  14.     /** */
  15.     public function onLoadInit(target) {
  16.         trace("class MyMovieClipLoader: listener onLoadInit");
  17.         target._parent.show();
  18.     }
  19. }
Wenn du eine Klasse schreibst, die von MovieClipLoader erbt, kannst du verschiedene Ansätze verfolgen, um viele Bilder zu laden. Entweder du bleibst in dieser Variante oder du schreibst eine Funktion function loadClips2Targets(urls:Array, targets:Array):Void (oder mit der Signatur function loadClips2Targets(new Array(new Array(url, target), new Array(url, target))):Void - also einem zweidimensuionalen Array).

Anbei noch die Sourcen.
Angehängte Dateien
Dateityp: zip Example.zip (33,0 KB, 11x aufgerufen)
Omega Psi ist offline   Mit Zitat antworten
Alt 12-05-2007, 10:14   #3 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Um nochmal auf deinen Code einzugehen:
  1. Ist das Symbol mit einem MovieClip verknüpft?
  2. Wieso ist container static?
  3. Nimm mal das './' weg in der Pfadangabe.
Omega Psi ist offline   Mit Zitat antworten
Alt 12-05-2007, 11:24   #4 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Auch wenn ich jetzt ein wenig ins OFF-Topic gehe. Aber gibt es eig. in dem Forum sowas wie ein ActionScript FAQ, mit Links zu ein paar Tutorials oder so?
Zb. gibt es oft mehrmals täglich Fragen bzz. des MovieClipLoader und in den meisten der Fälle ist es auch immer die gleiche Frage, bzw. der gleiche Fehler. Ich mein auch wenn F1 die meisten Probleme da lösen sollte, bzw. die Suchfunktion - so wär evt. noch so ein kleines FAQ ganz praktisch.
[RK] ist offline   Mit Zitat antworten
Alt 12-05-2007, 11:34   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Naja, in einem kleinen FAQ würden keine anderen Sachen stehen, als in F1. In großen FAQs geht's dann vllt schon in das Grundverständnis von Objekt-orientierter Programmierung.
  • Bezug auf das initiale Problem des Threads: Wieso beispielsweise erben viele von MovieClip, aber nicht von MovieClipLoader?
    - Würde man das einigermaßen konsequent durchziehen, würden auch viele Scope-Probleme einfach wegfallen. Man hätte einen besseren Überblick im Code und die Wiederverwendbarkeit von Klassen wäre auch effizienter gewährleistet.
Ich fänd einen FAQ echt gut, und würde mich auch gerne daran beteiligen, die Frage ist halt: für wen dieser FAQ geschrieben wird.
Omega Psi ist offline   Mit Zitat antworten
Alt 13-05-2007, 12:58   #6 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Man könnte zb. für die Anfänger zu jeden Artikel entsprechende Verweise auf die Livedocs von Adobe geben, bzw. Stichworte um in der Hilfe nachschlagen zu können. Ich wäre jedenfalls auch sehr an ein solches FAQ interessiert.
[RK] ist offline   Mit Zitat antworten
Alt 18-05-2007, 10:18   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 293
Hab den Code nun in folgenden geändert und es funktioniert leider immer noch nicht!!! wo können den da noch Fehler liegen?

class actionscript.createPicture{

var container:MovieClip;

function createPicture(){
_root.createEmptyMovieClip("container",999);
var mcLoader:MovieClipLoader = new MovieClipLoader();
var lauscher:Object=new Object();
lauscher.onLoadInit=function(ziel_mc){
//ziel_mc._width=500;
//ziel_mc._height=300;
}
mcLoader.addListener(lauscher);
mcLoader.loadClip("images/bild2.jpg",container);

}
}
__________________
www.media-mania.at
katimp ist offline   Mit Zitat antworten
Alt 18-05-2007, 11:49   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
ActionScript:
  1. class CreatePicture { // Klassennamen groß schreiben.
  2.     /** */
  3.     var container:MovieClip;
  4.     function CreatePicture(){
  5.         container = _root.createEmptyMovieClip("container",999); // Du hattest keine Zuweisung auf Container.
  6.         var mcLoader:MovieClipLoader = new MovieClipLoader();
  7.         var lauscher:Object=new Object();
  8.         lauscher.onLoadInit=function(ziel_mc){
  9.             trace("Listener onLoadInit called");
  10.         }
  11.         mcLoader.addListener(lauscher);
  12.         mcLoader.loadClip("images/bild2.jpg",container);
  13.     }
  14. }
Es bietet sich aber folgende Lösung mehr an:
ActionScript:
  1. /** */
  2. class CreatePicture extends MovieClip {
  3.     /** */
  4.     var container:MovieClip;
  5.     /** */
  6.     var contentPath:String;
  7.     /** */
  8.     function CreatePicture() {
  9.         super();
  10.         trace(contentPath);
  11.         // wird via attachMovie übergeben.
  12.         this.container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
  13.         this.contentPath = contentPath;
  14.         this.loadContent(this.container, this.contentPath);
  15.     }
  16.     /** */
  17.     function loadContent(container:MovieClip, contentPath:String):Void {
  18.         trace("function loadcontent");
  19.         var mcLoader:MovieClipLoader = new MovieClipLoader();
  20.         var lauscher:Object = new Object();
  21.         lauscher.onLoadInit = function(ziel_mc) {
  22.             trace("Listener onLoadInit called");
  23.         };
  24.         mcLoader.addListener(lauscher);
  25.         mcLoader.loadClip(contentPath, container);
  26.     }
  27.     /** */
  28.     function onRelease():Void {
  29.         trace(this+", "+this.contentPath);
  30.     }
  31. }
Wenn du von MovieClip erbst und in einen Container MovieClip die Bilder reinlädst, kannst du elegant ein Verhalten via onRelease() etc über CreatePicture implementieren.
Angehängte Dateien
Dateityp: zip CreatePicture.zip (5,7 KB, 11x aufgerufen)
Omega Psi ist offline   Mit Zitat antworten
Alt 18-05-2007, 11:53   #9 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
jedesmal ein neues objekt vom mcloader zu erzeugen finde ich unsauber und ist überflüssig.

mal eine grundsätzliche frage: weist du diese klasse einem mc zu? oder willst du eine abstrakte klasse zum laden von bildern schreiben?

Geändert von mojave (18-05-2007 um 11:58 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 18-05-2007, 12:02   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Sprichst du mit mir?
Omega Psi ist offline   Mit Zitat antworten
Alt 18-05-2007, 12:05   #11 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
der erste satz ging an dich.

der zweite an den/die threadersteller/in

mojave ist offline   Mit Zitat antworten
Alt 18-05-2007, 12:14   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ja, ist es auch, ich habe nur den Code verbessert und angepasst.

In Verbindung mit XML geht das sehr schön so: .zip

Verwendet in xml: Bilder dynamisch laden. wie? und laden einer SWF via MovieClipLoader loadClip
Omega Psi ist offline   Mit Zitat antworten
Alt 18-05-2007, 12:27   #13 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
hier mal eine kleine klasse die du mit deinem mc verknüpfen kannst.
ich würde jedoch einen schritt weiter gehen und die ladefunktionalität in eine eigene klasse auslagern. immer schön die funktionalitäten aufteilen.

PHP-Code:
class PictureMc extends MovieClip {
    
    private var 
mlLoader:MovieClipLoader;
    private var 
mlListener:Object;
    
    private var 
mcHolder:MovieClip;
    
    function 
PictureMc() {
        
super();
        
init();
    }
    
    
    private function 
init():Void
    
{
        
this.mlLoader = new MovieClipLoader();
        
this.mlListener = new Object();
        
this.mcHolder this.createEmptyMovieClip('mcHolder',this.getNextHighestDepth());
        
this.initListener();
    } 
    
    private function 
initListener():Void
    
{
        
this.mlListener.onLoadInit = function(mcLoaded:MovieClip){
            
mcLoaded._width 600;
            
mcLoaded._height 400;
        };
    }
    
    
    
    public function 
loadPicture(src:String):Void
    
{
        
this.mlLoader.loadClip(src,this.mcHolder);
        
this.mlLoader.addListener(this.mlListener);
    }
    
    


mojave ist offline   Mit Zitat antworten
Alt 18-05-2007, 14:39   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 293
ich möchte eine abstrakte Klasse zum laden von Bildern schreiben!
__________________
www.media-mania.at
katimp ist offline   Mit Zitat antworten
Alt 18-05-2007, 15:29   #15 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Schaue dir mal die .zip-Datei und die angeführten Threads an, in denen ich dazu schrieb. Wie mojave schon anführte. Sowas lagert man lieber aus. du brauchst also mindestens 2 Klassen.

In meinem Beispiel lade ich Pfade aus einer XML und übergieb diese Pfade an eine Klasse, die von MovieClipLoader erbt, um dann Bilder in MovieClips zu laden - alle nacheinander (mit nur einem MovieClipLoader! ).
Omega Psi 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 16:02 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele