PDA

Volledige versie bekijken : Infaden van Menu


Agent
%Europe/Berlin %807 %2008, 19:23
for (var i = 0; i<xml.childNodes.length; i++) {

//ArrayContent.push( xml.childNodes[i].childNodes[0].attributes.tekst);
//trace(ArrayContent.length);
MovMenu = "item_menu"+i;
var mc:MovieClip;
var mc3:MovieClip;
var mc4:MovieClip;
myRoot.createEmptyMovieClip(MovMenu,myRoot.getNext HighestDepth());
//trace(myRoot[MovMenu]);

myRoot[MovMenu]._xscale = 300;
myRoot[MovMenu].createTextField("titel_txt",myRoot.getNextHighestDepth(),5,500+(i*20),50,17);
//trace(this.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue);
myRoot[MovMenu].titel_txt.filters = [new BlurFilter(0, 0, 0)];
myRoot[MovMenu].titel_txt._alpha = 0;
myRoot[MovMenu].titel_txt.text = xml.childNodes[i].childNodes[0].firstChild.nodeValue;
myRoot[MovMenu].onEnterFrame = function() {
//trace(myRoot[MovMenu].titel_txt);
this.titel_txt._alpha += 10;
if (this.titel_txt._alpha>100) {
this.titel_txt._alpha = 100;
delete this.onEnterFrame;
//trace("alpha = 0");
}



Als ik dit laat lopen dan wordt mijn menu wel ingefade maar alles tergelijkertijd. Liever één voor één.
Heb al geprobeerd met een setInterval maar dat levert ook niets op. :(

Jan
%Europe/Berlin %035 %2008, 00:50
Als ik dit laat lopen dan wordt mijn menu wel ingefade maar alles tergelijkertijd. Liever één voor één.
Heb al geprobeerd met een setInterval maar dat levert ook niets op.
In plaats van een onEnterFrame te gebruiken zou je beter de Tween component gebruiken die in Flash zit. Deze heeft namelijk een onMotionFinished event zodat je weet wanneer en welke tween ten einde is. Na het inladen van al dat xml gedoe start je een functie voor het tweenen. Je houdt via een variabele bij welke movieclip aan het tweenen is.
Je start dan de eerste tween die de alpha tweent van myRoot["item_menu"+nr] en in de onMotionFinished verhoog je nr met 1 en start je de volgende tween.
Kijk dus in de help bij de Tween component of hier voor wat meer uitleg en voorbeelden:
http://www.oman3d.com/tutorials/flash/tweenclasseasing/
Je script gaat er dan ongeveer zo uitzien:

import mx.transitions.Tween;
import mx.transitions.easing.*;
xml.onLoad=function()
{
for (var i:Number = 0; i<xml.childNodes.length; i++)
{
var mc:MovieClip= myRoot.createEmptyMovieClip("item_menu"+i, myRoot.getNextHighestDepth());
mc._xscale = 300;
mc.createTextField("titel_txt", mc.getNextHighestDepth(), 5, 500+(i*20),50,17);
mc.titel_txt.filters = [new BlurFilter(0, 0, 0)];
mc.titel_txt._alpha = 0;
mc.titel_txt.text = xml.childNodes[i].childNodes[0].firstChild.nodeValue;
trace(mc._name + "._height= " + mc._height + " en " + mc._name + "._y= " + mc._y + " en " + mc._name + "._x= " + mc._x);

}
tweenen();
}
//----------------------------
var nr:Number=0;
function tweenen()
{
var tween:Tween=new Tween(this["item_menu"+nr], "_alpha", Strong.easeOut, 0,100, 1, true);
tween.onMotionFinished=function()
{
nr++;
tweenen();
}
}Ik heb ook de rest van je script wat aangepast en vereenvoudigd.

Verder zijn er nog wat dingen die me een beetje eigenaardig lijken:
Ten eerste maak je het tekstveld aan in myRoot[MovMenu] dus moet je ook daar de getNextHighestDepth() op toepassen ipv op myRoot. (Binnen elke movieclip beginnen de depths opnieuw vanaf 0)
myRoot[MovMenu].createTextField("titel_txt",myRoot.getNextHighestDepth(),5,500+(i*20),50,17);
zou moeten zijn:
myRoot[MovMenu].createTextField("titel_txt",myRoot[MovMenu].getNextHighestDepth(),5,500+(i*20),50,17);
Ten tweede:
Je zet dus alle movieclips op (0,0) en in elke movieclip zet je het tekstveld wat meer naar onder:500+(i*20) Trace de _height van elke movieclip maar eens na het plaatsen van het tekstveld...
Je zou beter binnen elke nieuwe movieclip het tekstveld op (0,0) zetten maar de movieclips zelf verspreiden over het scherm:
//...
var mc:MovieClip= myRoot.createEmptyMovieClip("item_menu"+i, myRoot.getNextHighestDepth());
mc._x=5;
mc._y=500+i*20;
//...
myRoot[MovMenu].createTextField("titel_txt",myRoot.getNextHighestDepth(),0,0,50,17);
//...
Groeten,
Jan

Agent
%Europe/Berlin %878 %2008, 21:04
Bedankt voor de uitgebreide reactie Jan !