[AS]Probleem met for loop

Pagina: 1
Acties:

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 19-02 10:38

THiCE

Say it with a flourish!

Topicstarter
Hoi,

Ik ben bezig met een Flash projectje, waarbij er bij elke klik een klein stukje tekst bij verschijnt.
Ik heb 198 movie clips. Als er op een van die clips geklikt wordt, moet de geklikte movie clip een zwarte kleur krijgen.. alle movie clips heten gd1 t/m gd198, evenals hun instance name natuurlijk ;)

Nu heb ik in de root, op frame 1 de volgende code neergezet:

code:
1
2
3
4
5
6
7
8
9
10
for (i=1; i<=198; i++) {
    eval("gd"+i).onRelease = function() {
        import flash.geom.ColorTransform;
        import flash.geom.Transform;
        var colorTrans:ColorTransform = new ColorTransform();
        colorTrans.rgb = 0x000000;
        var trans:Transform = new Transform(eval("gd"+i));
        trans.colorTransform = colorTrans;
    }
}


Als ik het test, door er ipv eval("gd"+i) gewoon gd1 neer te zetten, dan werkt het allemaal prima, maar als ik dan de variabelenaam variabel wil, dan werkt het niet... Weet iemand wat ik fout doe? Wordt een for-loop maar 1 x uitgevoerd? In essentie wil ik dus eigenlijk alles wat er in de for loop staat niet 198 x copy/pasten...
Het vermoeden dat ik heb, is dat ik de verkeerde methode gebruik... maar hoe zou het wel moeten? Alvast bedankt :)

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:44

Cyphax

Moderator LNX
Kun je die dingen niet in een array zetten, zodat je van gd[i] die .onRelease kunt zetten (dat zou wat netter zijn eigenlijk)?
Als ik dit zo eens bekijk is de manier waarop je eval gebruikt sowieso niet goed. Je verwacht van eval() een instantie terug waar je dan een method voor wil zetten, je wil het gebruiken als een soort getElementById() ofzo. :)
Als die functie bestaat in Actionscript kun je die trouwens ook wel gebruiken denk ik.
(ik ken verder Actionscript niet zo maar aangezien het een versie van ECMAscript is, zou het zomaar kunnen :))

[ Voor 86% gewijzigd door Cyphax op 05-06-2006 15:29 ]

Saved by the buoyancy of citrus


  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 19-02 10:38

THiCE

Say it with a flourish!

Topicstarter
Hee, ik heb het werkend!

Regel 7 was fout: ik verwees bij new Transform(eval("gd"+i)); niet naar de goede instance denk ik. De functie verwijst naar het object zelf, dan hoef ik het niet nog eens te gaan benoemen. De goede code is nu dus:
code:
1
2
3
4
5
6
7
8
9
10
11
for (i=1; i<=198; i++) {
    txt = eval("gd"+i);
    txt.onRelease = function() {
        import flash.geom.ColorTransform;
        import flash.geom.Transform;
        var colorTrans:ColorTransform = new ColorTransform();
        colorTrans.rgb = 0x000000;
        var trans:Transform = new Transform(this);
        trans.colorTransform = colorTrans;
    }
}


Scripten is net puzzelen :+ Maargoed, tis opgelost!

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Mag wel opgelost zijn, maar behoorlijk vies ;)

Aantal tips:

- eval is EVIL, als je naar het juiste element op het juiste _level of _root verwijst dan heb je het helemaal niet nodig:
Flash ActionScript:
1
_root["gd"+i].onRelease = ...


- Het klinkt alsof je 198 dezelfde mc's in je scene hebt. Waarom maak je dan niet gebruik van de prototype mogelijkheden, zodat elke nieuwe instantie van je movieclip de bijbehorende functie automatisch heeft.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 19-02 10:38

THiCE

Say it with a flourish!

Topicstarter
Omdat ik nog niet zo ver ben :P Ik heb ook 198 soortgelijke mc's in m'n scene. Elke MC bevat 3 letters van het gedicht wat al die mc's samen vormen. Die letters zijn vectorgraphics, geen daadwerkelijke dynamic tekstvelden dus :) Ik weet ook wel dat het netter kan, maar dit was ff quick en dirty omdat het morgenochtend af moet zijn.
Ik ben ook pas sinds een week met AS bezig, dus dit is een beetje overtypwerk uit een boek, wat ik dan naar hartelust verander en mee experimenteer. Ik begrijp het meeste wel, alleen heb ik nog moeite met de structuur, die vat ik nog niet helemaal, maar ik denk dat ik daarvoor gewoon te weinig script :)

maar ehm, hoe zou je dan variabele variabelen dan kunnen gebruiken? Op jouw manier? *leermoment*

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?