PDA

Volledige versie bekijken : for script probleempje


scorpes
%Europe/Berlin %580 %2005, 14:56
Hoi, heb een probleempje. Ik heb een zooitje met buttons gemaakt van 0 tot de grote van buttonArray.length, met daarbij horende movlieclips, waarbij ik wil dat ze gaan afspelen als ik met de muis over de button ga. Hier is de code:

for (i=0; i<buttonArray.length; i++) {
_root["button"+i].onRollOver = function() {
//trace("rollover works");// <-- Rollover werkt
//clip0.gotoAndPlay(2); // <-- Deze werkt
"clip"+i.gotoAndPlay(2); // <-- Deze werkt niet
}
}

Het probleem is dat "clip"+i.gotoAndPlay(2); het niet goed doet omdat die denk ik `i` wat een getal moet voorstellen in de het for script zit, niet herkend wordt wordt als die in een functie (in dit geval rollOver) staat. Heeft iemand hier een oplossing daarvoor?

theFlashWizard
%Europe/Berlin %582 %2005, 14:58
waarom die button zo: _root["button"+i]
en die clip opeens zo willen doen: "clip"+i
die moet namelijk ook gewoon zo: _root["clip"+i]
best logisch toch ;):)

Roenes
%Europe/Berlin %582 %2005, 14:59
Je moet om "clip" + i nog een path zetten. Ook moet je i apart opslaan omdat deze anders altijd buttonArray.length - 1 is. Je code zou dit moeten worden:

for (i=0; i<buttonArray.length; i++) {
_root["button"+i].i = i;
_root["button"+i].onRollOver = function() {
//trace("rollover works");
//clip0.gotoAndPlay(2);
_root["clip"+this.i].gotoAndPlay(2);
}
}

Dauntless
%Europe/Berlin %583 %2005, 14:59
_root["button"+i].onRollOver = function() {
this.gotoAndPlay(2);
}

Zo toch?
--Edit:
Ok, ik had verkeerd gelezen. Roenes' oplossing is juist :)

Roenes
%Europe/Berlin %583 %2005, 15:00
waarom die button zo: _root["button"+i]
en die clip opeens zo willen doen: "clip"+i
die moet namelijk ook gewoon zo: _root["clip"+i]
best logisch toch ;):)Ondanks dat gaat het nog niet werken. Zie mijn opmerking over het opslaan van die i :)

theFlashWizard
%Europe/Berlin %584 %2005, 15:01
hihi 3 reacties in 3 minuten.. :P
en idd.. je zal die i in de buttons moeten opslaan.. was ik ff vergeten..

Roenes
%Europe/Berlin %585 %2005, 15:02
hihi 3 reacties in 3 minuten.. :PGaat hard vandaag he ;)

kH_
%Europe/Berlin %590 %2005, 15:09
de i opslaan? Gewoon ff typen 'for(var i=0;i<blablabla;i++)'. Op die manier heb je direct een
tijdelijke variabele op de stack gemaakt en zo werkt dat voorbeeldje van wizard ook wel.

Dauntless
%Europe/Berlin %592 %2005, 15:13
de i opslaan? Gewoon ff typen 'for(var i=0;i<blablabla;i++)'. Op die manier heb je direct een
tijdelijke variabele op de stack gemaakt en zo werkt dat voorbeeldje van wizard ook wel.
Dat zal niet werken, je moet inderdaad de i opslaan in het object. Anders krijgt elke button de laatste 'i' waarde.
Probeer dit maar eens:

var depth:Number = 0;
for(var i = 0; i<5; i++){
var mc = this.attachMovie("mijnMc", "mc"+depth, depth++);
mc._y = i * 20;
mc.onRelease = function(){
trace(i);
}
}
(Dus maak een mc aan met een juiste linkage naam).

kH_
%Europe/Berlin %596 %2005, 15:19
Ow, dat bedoel je. Ik dacht dat ie alleen even een tijdelijke loop waarde nodig had. Nee, natuurlijk zal er geen kopie van die i beschikbaar zijn in iedere button, wanneer je die method van mij gebruikt. MAAR....doe dan ff het volgende:

var depth:Number = 0;
for(var i = 0; i<5; i++){
var mc = this.attachMovie("mijnMc", "mc"+depth, depth++,{i:i});
mc._y = i * 20;
mc._x=50;
mc.onRelease = function(){
trace(this.i);
}
}

Werkt iets sneller. Kun je on-the-fly een variabele toevoegen aan iedere instantie.

scorpes
%Europe/Berlin %603 %2005, 15:29
jeetje konden die antwoorden niet nog sneller! :P
He maar het werkt!! Bedankt Allemaal!

Roenes
%Europe/Berlin %616 %2005, 15:47
MAAR....doe dan ff het volgende:
En dat principe was dus precies wat ik al eerder aangaf :)

Maar mensen zien dat vaak over het hoofd waardoor er problemen ontstaan..

theFlashWizard
%Europe/Berlin %654 %2005, 16:41
eigenlijk zou die AStips post van me n sticky moete zijn.. net als op het oude forum.. daar staat dit namelijk ook bij..