Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-07-2009, 14:22   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 51
Galerie diverse bugs

hi leute

Ich arbeite gerade an einer xml Galerie.
Allerdings funktioniert noch nicht alles.

hier erstmal der Sourcecode:
PHP-Code:
import gs.*; //tween max imports.
import gs.easing.*;

stage.scaleMode StageScaleMode.NO_SCALE;
stage.align StageAlign.TOP_LEFT;

var 
i:Number 0

var spacing:Number 20;    //der abstand zwischen den bildern.
var frameBorder 10;    //breite des randes (/2) (auf jeder seite 5)
var thumbX:Number 0;    //gesamtbreite der bilder sowie dessen abstand
var currentImg:Number 1;    //momentanes bild
var my_images:XMLList;    
var 
my_total:Number;    //die anzahl bilder
var container_mc:MovieClip;
var 
preloader:preloader_mc = new preloader_mc();
var 
path:String "gallery/";
var 
gallery:String "switzerland/";
var 
isNotWorking:Boolean true;

var 
myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("gallery/"+gallery+"galleryData.xml"));
myXMLLoader.addEventListener(Event.COMPLETEprocessXML);

stage.addEventListener(Event.RESIZEResize);
button_01.addEventListener(MouseEvent.CLICKonBtn)
button_02.addEventListener(MouseEvent.CLICKonBtn)
button_03.addEventListener(MouseEvent.CLICKonBtn)

var 
infoMc:per_mc = new per_mc();
infoMc.info_mc.addEventListener(MouseEvent.MOUSE_OVERonInfoOver);
infoMc.info_mc.addEventListener(MouseEvent.MOUSE_OUTonInfoOut);
addChild (infoMc);
infoMc.infoMc.height/2;
infoMc.10;
//durch mouse over (onInfoOver) wird der text wieder sichtbar.

function processXML(e:Event):void {
    
    var 
myXML:XML = new XML(e.target.data);
    
my_images myXML.images.photo;
    
my_total my_images.length();
    
createContainer();
    
callThumbs();
    
myXMLLoader.removeEventListener(Event.COMPLETEprocessXML); 
    
//myXMLLoader = null;
}

function 
createContainer():void {
    
container_mc = new MovieClip();
    
container_mc.= (stage.stageWidth/2)-(my_images[0].width/2);
    
container_mc.= (stage.stageHeight/2);
    
    
addChild(container_mc);

    
container_mc.addEventListener(MouseEvent.MOUSE_OVERonOver);
    
container_mc.addEventListener(MouseEvent.MOUSE_OUTonOut);
    
container_mc.buttonMode true;
    
container_mc.addChild (preloader);
}


function 
callThumbs():void 
{
        
isNotWorking false;
        if (
i<=0//passt den hintergrund beim ersten druchlauf der höhe und breite der stage an
            
{
            
bg_mc.width stage.stageWidth;
            
bg_mc.height stage.stageHeight;
            }
        var 
thumb_url path +gallerymy_images[i].img;
        var 
thumb_loader = new Loader();
        
thumb_loader.load(new URLRequest(thumb_url));
        
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETEthumbLoaded);
        
thumb_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESSonLoading);
        
infoMc.per_txt.alpha 1;
        
TweenMax.to(infoMc.per_txt,3,{alpha:0.3}); //der info text wird nach 3 sek. unsichbar.
        
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETEdonePb);
        
thumb_loader.addEventListener(MouseEvent.CLICKonClick);
        
thumb_loader.=0;
        
thumb_loader.stage.stageHeight/2
        preloader
.=thumbX//positioniert den preloader an der selben stelle wo die bilder später abgelegt werden.
        
preloader.=-(my_images[i].height/2);//das bild wird in der Y achse zentriert, so auch der preloader
        
preloader.height =0//setzt die höhe auf 0, diese wird während des ladevorgang immer wieder aktualisiert.
        
isNotWorking true;
    }


function 
thumbLoaded(e:Event):void 
    
{//wird ausgeführt, wenn das bild geladen wurde.
        
var my_thumb:Loader Loader(e.target.loader);
        
my_thumb.thumbX//thumbX enthält alle breiten der bisher geladenen bilder, sowie dessen abstand.
        
TweenMax.to(my_thumb1, {colorMatrixFilter:{saturation:0,brightness:0}});//setzt den kontrast sowie helligkeit
        
my_thumb.= -my_thumb.height/2;

        
//dies erstellt ein rechteck, mit der breite und höhe des aktuellen bildes.
        
var frame:Sprite = new Sprite();
        
frame.graphics.beginFill(0xFFFFFF,1);
        
frame.graphics.drawRect(0,0,my_thumb.width,my_thumb.height);
        
frame.graphics.endFill();
        
frame.my_thumb.x-(frameBorder/2);
        
frame.my_thumb.y-(frameBorder/2);
        
frame.width frame.width+frameBorder;//und addiert ein rand.
        
frame.height frame.height+frameBorder;
        
container_mc.addChildAt(frame,0);
        
TweenMax.to(frame0, {colorMatrixFilter:{saturation:0,brightness:0}});
    if (
currentImg == my_total//wenn alle bilder geladen sind, wird dies ausgeführt.
        
//hier werden eventlistener und Childs entfernt, die nicht mehr gebraucht werden.
            //removeChild(infoMc);
            //container_mc.removeChild(preloader);
            
infoMc.info_mc.removeEventListener(MouseEvent.MOUSE_OVERonInfoOver);
            
infoMc.info_mc.removeEventListener(MouseEvent.MOUSE_OUTonInfoOut); 
        }
    
    if (
my_total-1//wird ausgefürt solange nicht alle bilder geladen sind. 1 wird entfertn da i um 1 kleiner ist, als die anzahl geladener bilder.
    
{
    
thumbX thumbXmy_thumb.width+spacing//dies zählt die breite sowie den abstand des momentanen bildes zu thumbX dazu.
    
i++;
    
currentImg++;
    
callThumbs();
    }
    
container_mc.addChild(my_thumb);
    
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETEthumbLoaded);
}


function 
donePb(e:Event):void 
{
    
//entfernt den aktuellen loader
    
var removeLoader:Loader Loader(e.target.loader);
    
removeLoader.removeEventListener(Event.COMPLETEdonePb);
}



function 
onOver(e:MouseEvent):void 
{
    
TweenMax.to(e.target0.25, {colorMatrixFilter:{saturation:1,brightness:1}});
}

function 
onOut(e:MouseEvent):void 
{
    
TweenMax.to(e.target0.25, {colorMatrixFilter:{saturation:0,brightness:0}});
}

function 
onLoading(e:ProgressEvent):void
    
{
        var 
per Math.floor(e.bytesLoaded/e.bytesTotal100);
        
infoMc.per_txt.text = (per+"%"+" Loading "+currentImg+" of "+my_total)
        
preloader.height =  (per/100) * my_images[i].height
    }

function 
onClick(e:MouseEvent):void
    
{    //der container wird verschoben bis das angeklickte bild in der bühenmitte liegt.
        
TweenMax.to(container_mc,1,{x:-e.currentTarget.x-e.currentTarget.width/2+stage.stageWidth/2,ease:Back.easeInOut})

    }

function 
onInfoOver (e:MouseEvent):void
    
{    //der infotext wird sichtbar
        
TweenMax.to(infoMc.per_txt,0.5,{alpha:1})
    }

function 
onInfoOut (e:MouseEvent):void
    
{    //und wieder unsichtbar, wenn der mauszeiger von button ist.
        
TweenMax.to(infoMc.per_txt,0.5,{alpha:0})
    }

function 
Resize(e:Event):void
{    //wird ausgelöst beim ändern der fenster grösse.
    
container_mc.= (stage.stageHeight/2);
    
bg_mc.width stage.stageWidth;
    
bg_mc.height stage.stageHeight;
}

function 
onBtn(e:MouseEvent):void
    
{
        
removeChild (container_mc)
        
0;
        
thumbX 0;
        
currentImg 1;
        switch (
e.currentTarget.name)
            {
                case 
"button_01":
                
gallery "switzerland/";
                break;
                case 
"button_02":
                
gallery "italy/"
                
break;
                case 
"button_03":
                
gallery "photoshop/"
                
break;
            }
        
myXMLLoader.load(new URLRequest("gallery/"+gallery+"galleryData.xml"));
        
myXMLLoader.addEventListener(Event.COMPLETEprocessXML);
        } 
Ich habe auf der Bühne drei Buttons, die die Funktion "onBtn" aufrufen und den Pfad der xml ändern.

das problem ist momentan, das ich gelegentlich einige fehler bekomme:

1. Bei wechseln der Galerien (etwa jedes 5. mal):Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.

2. Wenn ein Bild läd, und dann die Galerie gewechselt wird, werden das neue und alte Bild geladen, aber nur das neue angezeigt (was ich ja auch will).
bei "a" und "b" seht ihr, das die Galerie gewechselt wurde, aber 2 Bilder geladen werden.

http://www.flashforum.de/forum/attac...1&d=1247317676

3. in seltenen fällen Stopt der Film, bez. der Ladevorgang geht nicht weiter, obwohl dieser komplett geladen wurde.

4.Es kommt vor, das beim wechseln der Galerie das erste Bild, übersprungen, oder ein Bild aus der vorherigen Galerie geladen wird...

5.wie kann ich das anstellen, das, wenn ich auf ein Bild klicke, dies wie beim rollOver heller und farbig wird, und bleibt, bis das nächste Bild angeklickt wird?

so sieht es momentan aus:
http://www.spy15.ch/two/gallery_standalone.html
Angehängte Grafiken
Dateityp: png multiload.png (82,0 KB, 18x aufgerufen)
spy15 ist offline   Mit Zitat antworten
Alt 12-07-2009, 02:34   #2 (permalink)
Assegai-Pilot
 
Benutzerbild von blazenizer
 
Registriert seit: Oct 2006
Ort: 糞箱
Beiträge: 150
callThumbs() und thumbLoaded() rufen sich ja weiterhin auf, obwohl du ne neue XML reinlädst. Du musst den derzeitigen Ladevorgang abbrechen, wenn eine neue Galerie geladen werden soll. Danach schau nochmal wegen der Fehler, ich glaube, die werden dann einiges weniger sein.

Was die Einfärbung anbelangt machste das so:
PHP-Code:
var centerImg:String ""// Speichert den Namen des Bildes in der Bildmitte 

function onOut(e:MouseEvent):void  

    if(
e.target.name != centerImg) {
    
TweenMax.to(e.target0.25, {colorMatrixFilter:{saturation:0,brightness:0}}); 
    }


function 
onClick(e:MouseEvent):void 
{
    if(
centerImg != e.target.name && centerImg != "") {
        
TweenMax.to(container_mc.getChildByName(centerImg), 0.25, {colorMatrixFilter:{saturation:0,brightness:0}}); // altes centerImg ausfaden
    
}
    
TweenMax.to(container_mc,1,{x:-e.currentTarget.x-e.currentTarget.width/2+stage.stageWidth/2,ease:Back.easeInOut}) 
    
centerImg e.target.name;

blazenizer ist offline   Mit Zitat antworten
Alt 12-07-2009, 11:14   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 51
super, danke schon mal, hat prima geklappt.
ich hab allerdings noch einige Zeilen hinzugefügt:

PHP-Code:
function thumbLoaded(e:Event):void 
    
{//wird ausgeführt, wenn das bild geladen wurde.
        
var my_thumb:Loader Loader(e.target.loader);
        
        if (
thumbX == 0//bei ersten bild
            
{
                
centerImg my_thumb.name//wird das erste bild als centerImg definiert, und somit die rollout funktion nicht ausgeführt 
            
}
        else 
//wenn das bild nicht das erste ist:
            
{
            
TweenMax.to(my_thumb1, {colorMatrixFilter:{saturation:0,brightness:0}});//setzt den kontrast sowie helligkeit
            

somit ist das erste Bild gleich das centerImg und somit farbig.

das mit dem entfernen der loader, hab ich mir auch schon gedacht, stehe aber bei der Ausführung auf dem Schlauch...
ausserdem, was passiert eigentlich mit dem Inhalt, des container_mc, wenn ich diesen per removeChild entferne?
ist das sauber, oder hab ich dann alle Bilder irgendwo noch geladen?
PHP-Code:
function onBtn(e:MouseEvent):void
    
{
        
removeChild (container_mc
Danke schon mal für die Hilfe
spy15 ist offline   Mit Zitat antworten
Alt 14-07-2009, 11:02   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 51
keiner ne idee?
was ich einfach nicht hibekomme, ist das entfernen der callThumbs() und thumbLoaded().
da es diese ja mehrmals gibt.
wie entferne ich die alle?
spy15 ist offline   Mit Zitat antworten
Alt 14-07-2009, 11:30   #5 (permalink)
Assegai-Pilot
 
Benutzerbild von blazenizer
 
Registriert seit: Oct 2006
Ort: 糞箱
Beiträge: 150
Wenn du Loader.close anwendest, wird der Ladevorgang unterbrochen, der Complete-Event nicht mehr gefeuert und die Schleiferei wird unterbrochen. Erst wieder gestartet, wenn ein neuer load()-Aufruf kommt.

Sprich
PHP-Code:
var thumb_loader:Loader;

function 
callThumbs():void  

...
thumb_loader = new Loader();
...
}

function 
onClick(e:MouseEvent):void  
{
try {
 
thumb_loader.close();
} catch(
e:Error) {
 
trace("thumb_loader.load() noch nicht gestartet");
}
... 
blazenizer ist offline   Mit Zitat antworten
Alt 14-07-2009, 13:27   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 51
danke für die schnelle Antwort.
kann es sein, das du dich vertippt hast?
PHP-Code:
function onClick(e:MouseEvent):void 
müsste das nicht die onBtn Funktion sein ?

hab beides probiert, hat aber leider keine Änderung gebracht...
spy15 ist offline   Mit Zitat antworten
Alt 28-07-2009, 23:05   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 51
hab mich nochmal ran gesetzt, aber funktioniert noch nicht ganz.
ich kann zwar den loader stoppen, bez. closen, aber die Funktion läuft immer noch weiter, bez. kann weiter laufen.
wie kann ich eine Funktion sofort stoppen?
spy15 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
galerie, gallery, xml

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 13:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele