Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-10-2007, 16:21   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 27
SlideShow in AS3

Hey,

ich möchte eine Slideshow in AS3 umsetzen. Eigentlich ja kein Problem - zumindest in AS2, aber mir bereiten die Loaders und addChilds doch etwas Probleme ,-((

Also:

Es gibt einen Array mit z.B. 3 Bildern. Diese sollen zu Beginn alle hintereinander geladen werden und in einen MovieClip bzw. Sprite gepackt werden. Anschließend soll das erste Bild eingefadet werden. Mittels Buttons kann ich vor und zurück "blättern" sowie das erste und letzte Bild direkt ansteuern. Beim weiterblättern soll das aktuell angezeigte Bild erst ausgefadet werden und dann das neue Bild eingefadet werden. Soviel zur Theorie..

Das ein- und ausfaden geschieht mit einer Tweening-Engine (Tweenlite).

In AS2 habe ich das über Movieclips gelöst, die ich über den Instanznamen direkt ansprechen konnte.

Nun zur Praxis:
Für das hintereinander Laden der Bilder nehme ich ein Loader-Object bzw. pro Bild ein Loader-Object.

PHP-Code:
    var counter Number imageList.length;
    for( var 
i:Number 0counteri++ ) {
        
loadImageimageList] );
    }

function 
loadImageurl String ) : void {
    var 
loader:Object = new Loader();
    
loader.contentLoaderInfo.addEventListenerEvent.INIThandleSuccess );
    
loader.contentLoaderInfo.addEventListenerIOErrorEvent.IO_ERRORhandleError );
    
loader.load( new URLRequesturl ) );
    
imageArr.pushloader );

Danach habe ich ein Array (imageArr) mit den Loader-Objects für jedes Bild. Die Funktion "handleSuccess" wird aufgerufen, sobald ein Bild fertig geladen ist. Dort platziere ich das jeweilige Object auf der Bühne. Allerdings sind das dann Loader-Objecte und keine Sprites.

PHP-Code:
var imgHolder Sprite = new Sprite();
imgHolder.addChildimageArr] ); 
Eigentlich möchte ich Sprites mit den Bildern drin haben, die ich gezielt ansteuern kann. Leider steh ich da etwas auf dem Schlauch, wann ich mit den Loadern arbeite, wie und ob man die Loader in einen Array packen muss und wann ich etwas mit addChild platziere.

Gruß
Olli
<ok> ist offline   Mit Zitat antworten
Alt 23-10-2007, 17:09   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ich hab mal eine kleine Klasse geschrieben.
ActionScript:
  1. /**
  2. * @author
  3. * @version
  4. *
  5. * Created with BeanButler (c) 2007, Florian Salihovic,
  6. * <a href='mailto:florian.salihovic@gmail.com'>florian.salihovic</a>
  7. */
  8. package {
  9.     import flash.display.Loader;
  10.     import flash.display.Sprite;
  11.     import flash.events.Event;
  12.     import flash.events.IOErrorEvent;
  13.     import flash.net.URLRequest;
  14.     public class MyPicture extends Sprite {
  15.         public var loader:Loader;
  16.         public var url:String;
  17.         public function MyPicture(url:String) {
  18.             this.url = url;
  19.             this.loader = new Loader();
  20.             this.load();
  21.         }
  22.         public function eventListener(event:Event):void {
  23.             if (event.type == Event.INIT) {
  24.                 trace("Init.");
  25.             } else if (event.type == Event.COMPLETE) {
  26.                 trace("Complete");
  27.                 this.addChild(this.loader);
  28.             } else if (event.type == IOErrorEvent.IO_ERROR) {
  29.                 trace("Could not load the picture: "+this.url);
  30.             }
  31.         }
  32.         public function load():void {
  33.             this.loader.contentLoaderInfo.addEventListener(Event.INIT, eventListener);
  34.             this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventListener);
  35.             this.loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, eventListener);
  36.             this.loader.load(new URLRequest(this.url));
  37.         }
  38.         public override function toString():String {
  39.             var asString:String = 'Bean';
  40.             asString += ' - loader: '+this.loader;
  41.             asString += ' - url: '+this.url;
  42.             return asString;
  43.         }
  44.     }
  45. }
Die kannst du ganz einfach anwenden:
ActionScript:
  1. var pictures:Array = new Array("architecture.png");
  2. for (var i:uint = 0; i<pictures.length; i++) {
  3.     this.addChild(new MyPicture(pictures[i]));
  4. }
Der ganze Lademechanismus ist nun in der Klasse MyPicture. Die Positionierung etc machst du dann einfach über die MyPicture Instanzen.
Omega Psi ist offline   Mit Zitat antworten
Alt 24-10-2007, 11:20   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 27
Hi,

danke für die Klasse. Das hat schon mal etwas Licht und Dunkel gebracht.

Die MyPicture Instanzen liegen ja anschließend in der DisplayList von "this" also der Stage oder einem andersweitig definierten Sprite. Um an die einzelnen Elemente dranzukommen, verwende ich wiederum getChildAt() oder gibts auch einen anderen Weg?

Gruß
Olli
<ok> ist offline   Mit Zitat antworten
Alt 24-10-2007, 11:29   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Du kannst über das <instanz>.name einen Instanznamen vergeben und dann auf dieses Objekt via <container der die instanz enthält>.getChildByName(string); drauf zugreifen. Hängt davon ab, was du amchen willst.
Omega Psi ist offline   Mit Zitat antworten
Alt 25-10-2007, 11:17   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 27
Hi,
soweit funktioniert alles. Ich habe allerdings noch Schwierigkeiten an die Höhe und Breite des geladenen Bilder zu kommen.

Wenn z.B. in <container>.getChildAt(0) die BildInstanz liegt. Wie erhalte ich die Maße des Bildes?

<container>.getChildAt(0).height -> geht nicht..
<container>.getChildAt(0).loaderInfo.height -> geht nicht, da zuerst noch nicht geladen und später als rückgabe die stage.height erfolgt.

In der MyPictures Klasse kann ich mit event.currentTarget.height die Höhe abfragen. Allerdings bringt mir das augenscheinlich nichts, wenn ich später in der Hauptklasse auf die Instanz zugreifen möchte.

Gruß
Olli
<ok> ist offline   Mit Zitat antworten
Alt 25-10-2007, 12:45   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Du musst dort, wo die Bilder verwaltet werden einen EventListener an die Bilder binden, der auf ein ADDED_TO_STAGE Event lauscht. Die Bilder dürfen dabei erst nach einem Event.COMPLETE geadded werden. Dann kannst du width und height abfragen.
Omega Psi ist offline   Mit Zitat antworten
Alt 25-10-2007, 13:28   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 27
Super Danke Dir!

Musste allerdings auf Event.ADDED ausweichen, da ADDED_TO_STAGE nicht funktionierte. Letzteres ist wohl erst ab 9.0.28.0 enthalten. Hab allerdings Flash Player 9.0.45.0 installiert. Auf was greift den Flash CS3 IDE zurück?

Finde AS3 wirklich nen ordentlichen Schritt nach vorne, aber die Umstellung ist doch etwas aufwendiger, da man noch in der alten Denke des öfteren festhängt.

Gruß
Olli
<ok> ist offline   Mit Zitat antworten
Alt 25-10-2007, 17:58   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Auf was Flash CS3 zurückgreift, kann ich dir leider nicht sagen. Das müsste aber auch irgendwo stehen. Musst mal schauen.
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:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele