Antworten auf deine Fragen:
Neues Thema erstellen

AS3 / XML Array auf letzten Eintrag prüfen

Indium1

Nicht mehr ganz neu hier

Sorry, habe versehentlich auf Enter geklickt bevor der Titel fertig war:

Titel: AS3 / XML Array auf letzten Eintrag prüfen

Hallo an alle Leser,


ich möchte gerne die Vorschaubilder in einer Bildergalerie mit Tweener Caurina unterschiedlich auf der Bühne verteilen lassen. Hierbei soll sich das "letzte Bild" aus der XML-Datei (array_bilder) mehrfach um die eigene Achse drehen.

Mittels if-else Anweisung wollte ich prüfen ob der vorhandene Wert der letzte ist.

Code:
[FONT=Arial][SIZE=2]function xml_erstellen(ev:Event):void 
{
 xml_daten = new XML(ev.target.data);
 zaehler_bilder_wurden_uebergeben = xml_daten.bild.length();
 for(i = 0; i < zaehler_bilder_wurden_uebergeben; i++)
 {
  array_bilder.push( {
  klbild: xml_daten.bild[i].klbild.toString(), 
  grbild: xml_daten.bild[i].grbild.toString(), 
  nabild: xml_daten.bild[i].nabild.toString(), 
  tbild: xml_daten.bild[i].tbild.toString() } );
 }
 kleine_bilder_holen(ev);
}

function kleine_bilder_holen(ev:Event):void
{
 var kleine_bilder_suchen:URLRequest = new URLRequest(ordner_bilder + array_bilder[bild_nr].klbild); 
 var kleine_bilder_laden:Loader = new Loader(); 
 kleine_bilder_laden.contentLoaderInfo.addEventListener(Event.COMPLETE, function() 
 {
  if(bild_nr < zaehler_bilder_wurden_uebergeben)
  kleine_bilder_holen(ev);

  var mc_bild_klein:MovieClip = new MovieClip();
  
  mc_bild_klein.addChild(kleine_bilder_laden);

  mc_bild_klein.name = String(mc_kl_bilder_gruppe.numChildren);
  mc_bild_klein.buttonMode = true;
  mc_bild_klein.tabEnabled = true;
  mc_bild_klein.focusRect = true;
  mc_bild_klein.mouseEnabled = true;
  mc_bild_klein.mouseChildren = false;
  mc_bild_klein.smoothing = true;  
  mc_bild_klein.x = -200; // Start der kleinen Bilder X Achse
  mc_bild_klein.y = 220; // Start der kleinen Bilder Y Achse
  mc_bild_klein.alpha = 0;

  if (bild_nr === array_bilder.length)
  {
    Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: -720, time: 1, transition: "easeOutQuart"});
   }
   else
   {
     Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: Math.random() * 90 - 45, time: 1, transition: "easeOutQuart"});
    }
  mc_kl_bilder_gruppe.addChild(mc_bild_klein);
 });
 kleine_bilder_laden.load(kleine_bilder_suchen);
 bild_nr++;
}
[/SIZE][/FONT]

Nun ist es so, dass sich die letzten 2 Bilder um die eigene Achse drehen. Es soll aber, wie oben schon erwähnt, sich nur das letzte Bild drehen. Mehrfache Versuche mit Operatoren schlugen bislang fehl und ich hoffe auf eine kleine Unterstützung von euch.


Vielen Dank und freundliche Grüße,

Indium1
 
Zuletzt bearbeitet:

keul3

3dsMax | 3D-Contest

AW: AS3 / XML Array auf letzten Eintrag prüfen

Habs jetz nur grob überflogen, wie schauts aus wenn du es mit

if (bild_nr === array_bilder.length + 1)

probierst?
 

Indium1

Nicht mehr ganz neu hier

AW: AS3 / XML Array auf letzten Eintrag prüfen

Hallo keul3,

vielen Dank!

Leider hat dies auch nicht geklappt. Ich glaube aber, dass ich Deinen Vorschlag vorher schon mal ausprobiert habe. Bei zigtausenden Versuchen verliert man leicht den Überblick. Habe jetzt mal mit Minuszeichen ausprobiert und zwar mit - 2. Jetzt wird das allererste Bild gedreht. Vielleicht spielt hier auch noch die Deklarierung der Variablen eine wichtige Rolle. Vorsorglich liste ich diese auch noch auf:

Code:
[FONT=Arial][SIZE=2]var zaehler_bilder_wurden_uebergeben:Number;[/SIZE][/FONT]
[FONT=Arial][SIZE=2]var i:Number;[/SIZE][/FONT]
[FONT=Arial][SIZE=2]var array_bilder = new Array();[/SIZE][/FONT]
[FONT=Arial][SIZE=2]var bild_nr:Number = 0;[/SIZE][/FONT]
[FONT=Arial][SIZE=2]var mc_kl_bilder_gruppe:MovieClip = new MovieClip();[/SIZE][/FONT]
Wäre nett wenn Du noch mal drüberschauen würdest.

Vielen Dank im Voraus und Grüße,

Indium1
 

keul3

3dsMax | 3D-Contest

AW: AS3 / XML Array auf letzten Eintrag prüfen

Da hat aber noch anderes gefehlt, zum Beispiel ein paar geschwweifte Klammern für dein
if(bild_nr < zaehler_bilder_wurden_uebergeben)-Statement. Da ich nicht wusste was darein gehört und ich kein Fan von Funktionen in Funktionen bin, hab ichs ein wenig umgeschrieben. Weil ich die Tweener-Engine nicht hab, hab ich mit alpha-properties die logik überprüft.

PHP:
var zaehler_bilder_wurden_uebergeben:Number;
var array_bilder = new Array();
var bild_nr:Number = 0;
var mc_kl_bilder_gruppe:MovieClip = new MovieClip();
addChild(mc_kl_bilder_gruppe);

var xml_daten:XML;
var xmlList:XMLList = new XMLList();

var xmlPfad:URLRequest = new URLRequest("images.xml");

//trace(xmlPfad.url);

var xmlLoader:URLLoader = new URLLoader();

xmlLoader.load(xmlPfad);
xmlLoader.addEventListener(Event.COMPLETE, xml_erstellen);


function xml_erstellen(ev:Event):void
{
    xml_daten = new XML(ev.target.data);
    xmlList = xml_daten.bilder_node.children();
    //trace(xmlList[0].attribute("thumb"));
    zaehler_bilder_wurden_uebergeben = xmlList.length();
    //trace(zaehler_bilder_wurden_uebergeben);
    for (var i:uint = 0; i < zaehler_bilder_wurden_uebergeben; i++)
    {
        trace(xmlList.babes.attribute("thumb"));
        array_bilder.push(xmlList[i].attribute("thumb"));
    }
    kleine_bilder_holen();
}

var kleine_bilder_laden:Loader;


function kleine_bilder_holen():void
{
    if (bild_nr < zaehler_bilder_wurden_uebergeben)
    {
        var kleine_bilder_suchen:URLRequest = new URLRequest(array_bilder[bild_nr]);
        //trace("yooo" + bild_nr);
        kleine_bilder_laden = new Loader();
        kleine_bilder_laden.contentLoaderInfo.addEventListener(Event.COMPLETE, bilderPlatzieren);
        kleine_bilder_laden.load(kleine_bilder_suchen);
    }
}

function bilderPlatzieren(event:Event):void
{

    var mc_bild_klein:MovieClip = new MovieClip();

    mc_bild_klein.addChild(kleine_bilder_laden);

    mc_bild_klein.name = String(mc_kl_bilder_gruppe.numChildren);
    mc_bild_klein.buttonMode = true;
    mc_bild_klein.tabEnabled = true;
    mc_bild_klein.focusRect = true;
    mc_bild_klein.mouseEnabled = true;
    mc_bild_klein.mouseChildren = false;
    mc_bild_klein.smoothing = true;
    mc_bild_klein.x = 000 + bild_nr * 100;// Start der kleinen Bilder X Achse
    mc_bild_klein.y = 220;// Start der kleinen Bilder Y Achse
    mc_bild_klein.alpha = 0;
    

    if (bild_nr == array_bilder.length - 1)
    {
        mc_bild_klein.alpha = .2;
        //Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: -720, time: 1, transition: "easeOutQuart"});
    }
    else
    {

        mc_bild_klein.alpha = 1;
        //Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: Math.random() * 90 - 45, time: 1, transition: "easeOutQuart"});
    }
    mc_kl_bilder_gruppe.addChild(mc_bild_klein);
    
    bild_nr++;
    kleine_bilder_holen();

}
bei mir funktioniert das soweit. Achja, auf das Array kannst du verzichten, wenn du mit der xml- oder xmlList-Klasse arbeitest. Und Iteratoren dürfen gern in der Schleife selbst deklariert werden.
 
Zuletzt bearbeitet:

Indium1

Nicht mehr ganz neu hier

AW: AS3 / XML Array auf letzten Eintrag prüfen

Hallo keul3,

vielen Dank, dass Du so viel Arbeit und Mühe investiert hast!


Ich werde aber erst in den nächsten Tagen dazu kommen Deinen Vorschlag umzusetzen.

Melde mich noch mal bei Dir.

Wünsche Dir jetzt erst einmal einen schönen Feierabend!

Freundliche Grüße,

Indium1
 
A

ad86

Guest

AW: AS3 / XML Array auf letzten Eintrag prüfen

Hi,

Da hat aber noch anderes gefehlt, zum Beispiel ein paar geschwweifte Klammern für dein
if(bild_nr < zaehler_bilder_wurden_uebergeben)-Statement.

Es sind doch alle geschweiften Klammern da.

@Indium1
Das Problem ist wahrscheinlich nur, dass Du eine anonyme Funktion für das Event "Event.COMPLETE" für den Loader kleine_bilder_laden nutzt. Und darin rufst Du die Methode nochmals auf. (Mit rot im Script gekennzeichnet)

Ansonsten habe ich das Script NICHT getestet.

Code:
function xml_erstellen(ev:Event):void{
	xml_daten = new XML(ev.target.data);
	zaehler_bilder_wurden_uebergeben = xml_daten.bild.length();
	for(i = 0; i < zaehler_bilder_wurden_uebergeben; i++){
		array_bilder.push( {
			klbild: xml_daten.bild[i].klbild.toString(), 
			grbild: xml_daten.bild[i].grbild.toString(), 
			nabild: xml_daten.bild[i].nabild.toString(), 
			tbild: xml_daten.bild[i].tbild.toString()
		});
	}
	kleine_bilder_holen(ev);
}

function [COLOR="red"]kleine_bilder_holen(ev:Event)[/COLOR]:void{
	var kleine_bilder_suchen:URLRequest = new URLRequest(ordner_bilder + array_bilder[bild_nr].klbild); 
	var kleine_bilder_laden:Loader = new Loader();

	//Beginn der anonymen Methode
	kleine_bilder_laden.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {
	if(bild_nr < zaehler_bilder_wurden_uebergeben)
		[COLOR="Red"]kleine_bilder_holen(ev); // <- Wieso rufst Du die Methode nochmals auf??[/COLOR]
		var mc_bild_klein:MovieClip = new MovieClip();
  		mc_bild_klein.addChild(kleine_bilder_laden);
		mc_bild_klein.name = String(mc_kl_bilder_gruppe.numChildren);
		mc_bild_klein.buttonMode = true;
		mc_bild_klein.tabEnabled = true;
		mc_bild_klein.focusRect = true;
		mc_bild_klein.mouseEnabled = true;
		mc_bild_klein.mouseChildren = false;
		mc_bild_klein.smoothing = true;  
		mc_bild_klein.x = -200; // Start der kleinen Bilder X Achse
		mc_bild_klein.y = 220; // Start der kleinen Bilder Y Achse
		mc_bild_klein.alpha = 0;
		[COLOR="DeepSkyBlue"]if (bild_nr == array_bilder.length-1){[/COLOR]
			Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: -720, time: 1, transition: "easeOutQuart"});
		}
		else {
			Tweener.addTween(mc_bild_klein, {x: Math.random() * 470 + 400, y: 150, alpha: 1, rotation: Math.random() * 90 - 45, time: 1, transition: "easeOutQuart"});
		}
		mc_kl_bilder_gruppe.addChild(mc_bild_klein);
 	});
	//Ende der Methode.
 	kleine_bilder_laden.load(kleine_bilder_suchen);
 	bild_nr++;
}

MFg ad86
 

Indium1

Nicht mehr ganz neu hier

AW: AS3 / XML Array auf letzten Eintrag prüfen

Hallo ad86,
hallo keul3,

Danke nochmals für eure Tipps!

Wie ad86 schon vermutet hatte, lag es an dem direkten Neuaufruf der Methode kleine_bilder_holen(ev);. Diese Methode darf erst am Schluss neu aufgerufen werden, da ja hier erst die Variable bild_nr um 1 erhöht wird.

Bsp.:

Code:
  [FONT=Arial][SIZE=2] });[/SIZE][/FONT]
  [FONT=Arial][SIZE=2]mc_kl_bilder_gruppe.addChild(mc_bild_klein);[/SIZE][/FONT]
  [FONT=Arial][SIZE=2]bild_nr++;[/SIZE][/FONT]
  [FONT=Arial][SIZE=2]kleine_bilder_holen();[/SIZE][/FONT]
  [FONT=Arial][SIZE=2]}[/SIZE][/FONT]
Jetzt funktioniert es auch mit if (bild_nr == array_bilder.length-1)! :)


Viele Grüße,

Indium1
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.634
Beiträge
1.538.448
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben