Toon posts:

[flashmx2004] string veranderen in movieclip naam

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb verschillende waarden in een extern bestand staan.
Deze zijn automatisch ingelezen en geplaatst in:
_level0.Portfolio_left_button_1_1.Breedte
_level0.Portfolio_left_button_1_2.Breedte
_level0.Portfolio_left_button_1_3.Breedte
etc.

Om mijzelf een hoop code regels te besparen heb ik met variabelen geprobeerd die waarden te laden.
de variabelen zijn strings ivm variabele nummers die erachter moeten.


if ((_level10.AWARE._currentFrame >= 100) & (_level10.AWARE._currentFrame < 120)) {
var Hitme1props:String = "_level0.Portfolio_left_button_1_";
}

var Hitme1Total1:String = Hitme1props + "1";
var Hitme1props1 = Number(HitmeTotal1);
Hitme1._width = Number(Hitme1props1.Breedte);

Bovenstaande werkt natuurlijk niet omdat ik een string met letters wil veranderen in een number. Ik moet dus de waarde van _level0.Portfolio_left_button_1_1.Breedte hebben.
Hoe doe ik dat zodat hij snapt dat ik de waarde krijg?

  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Ik begrijp het probleem niet, je zet wat in een var en wil het er weer uit lezen? :?

Leg eens duidelijk uit wat je wilt bereiken.

Huur mij in als freelance SEO consultant!


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

volgens mij wil je een objectnaam her-evalueren, dat kan met eval maar dat is eigenlijk niet zo heel erg netjes. (overigens bestaat .breedte natuurlijk ook niet)

kun je het nog iets duidelijker

Stoer; Marduq


Verwijderd

Topicstarter
Ik lees een aantal dingen uit een textfile. Daar staat het zo in:

[Portfolio_left_button_1_1]
Breedte=200
Hoogte=100
x_positie=100
y_positie=100
Alpha=100

en dan van heel erg veel buttons. Het moet namelijk dynamisch zijn, en wel zo dat je geen flash nodig hebt.

Nu heb ik een script dat die waarden van al die buttons uitleest en ze vervolgens met punten ertussen in flash zet. Dit script staat in level 0 dus vandaar .level0

Dus als ik een button 1 heb hoef ik alleen maar aan te geven in flash:
button1._x = _level0.Portfolio_left_button_1_1.x_positie; // dat is dus 100
button1._y = _level0.Portfolio_left_button_1_1.y_positie; // dat is ook 100
etc.

Bovenstaande werkt prima.

Het probleem is dus dat die _level0.Portfolio_left_button_1_1.x_positie; ook zelf samen te stellen moet zijn omdat ik anders van ontzettend veel buttons een apart script moet schrijven.

Dit gedeelte: ".level0.Portfolio_left_button_1_" wil ik samenvoegen met "2" of "3" of "4" etc. zodat ik "_level0.Portfolio_left_button_1_2" krijg.

Dan moet Flash de waarde lezen van de 2 strings die ik gecombineerd heb. Zie de eerste post.

is het zo duidelijker?

  • sanderb
  • Registratie: November 2000
  • Laatst online: 00:48
eval is inderdaad een oplossing...tegenwoordig kan het ook zo:

stel dat je buttons in een array staan..
Flash ActionScript:
1
2
3
for (i=0;i<buttons.length;i++){
buttons[i]._width = _root["portfolio_left_button_1_"+i].Breedte;
}


je variabelen heb je geladen op de root, als je ze in een ander object laad, zou het dus
_root.anderObject[ ] worden

Misschien is het trouwens handiger om in plaats van tekst XML in te lezen?
dan kun je meteen mooi alle objecten koppelen terwijl je door de xml loopt.

[ Voor 23% gewijzigd door sanderb op 20-04-2005 01:40 ]

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


Verwijderd

Topicstarter
aha eindelijk snap ik hoe ik het veel korter kan maken :)

thanx.

nog 1 vraagje:
buttons[i]._width = _root["portfolio_left_button_1_"+i].Breedte;

in het begin (buttons[i]._width) leest hij buttons.1._width

hoe maak ik daarvan buttons1._width?
dus zonder een punt ertussen?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op woensdag 20 april 2005 @ 11:02:
aha eindelijk snap ik hoe ik het veel korter kan maken :)

thanx.

nog 1 vraagje:
buttons[i]._width = _root["portfolio_left_button_1_"+i].Breedte;

in het begin (buttons[i]._width) leest hij buttons.1._width

hoe maak ik daarvan buttons1._width?
dus zonder een punt ertussen?
Je 'evaluatie' is natuurlijk met buttons erbij ;)

code:
1
2
// moet je wel je level weten waar je buttons zitten :)
_level0["buttons" + i]._width

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.


Verwijderd

Topicstarter
ok ik heb het een beetje anders gedaan, maar het is opgelost. Nu heb ik (alweer) een probleem.
Hoe ken ik aan die buttons een rollover/onrelease toe zonder 200 keer zo goed als hetzelfde scriptje te moeten kopieren.

Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if ((_level10.AWARE._currentFrame>=100) & (_level10.AWARE._currentFrame<120)) {
    var Buttonvariable:String = "_level0.Portfolio_left_button_1_";
}

// button assignment & placement
for (i=1; i<=10; i++) {
    var Hitmeprops = eval(Buttonvariable+i);
    var Hit:String = "Hitme";
    var Hitme = eval(Hit+i);
    Hitme._width = Number(Hitmeprops.Breedte);
    Hitme._height = Number(Hitmeprops.Hoogte);
    Hitme._x = Number(Hitmeprops.x);
    Hitme._y = Number(Hitmeprops.y);
    Hitme._alpha = Number(Hitmeprops.alpha);
    Hitme.onRollOver = function() {
        if (_root.mainMenuMC._currentFrame == 1) {
            ALT_txt._x = (_xmouse);
            ALT_txt._y = (_ymouse);
            ALT_txt.text = (Hitmeprops.infoNL);
        } else if (_root.mainMenuMC._currentFrame == 20) {
            ALT_txt._x = (_xmouse);
            ALT_txt._y = (_ymouse);
            ALT_txt.text = (Hitmeprops.infoUK);
        }
    }
}


heel erg logisch is nu natuurlijk dat de onRollOver alleen de laatst ingelezen waarde pakt (_level0.Portfolio_left_button_1_10.infoNL dus) ipv 1_1 / 1_2 / 1_3 etc.

Hetzelfde probleem krijg ik ook met onRelease.

Verwijderd

Topicstarter
laat maar :)

[ Voor 99% gewijzigd door Verwijderd op 20-04-2005 15:39 ]


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

voor de volledigheid (en de search)

dat doe je door die functie toe te kennen vanuit je script

(versimpelt)
code:
1
2
3
4
5
6
for (i=0; i<200; i++) {
 duplicateMovieClip(button, "button" + i, 100+i)
 _root["button"+i].onRelease = function () {
    //u klikdingen hier
  }
}

Stoer; Marduq

Pagina: 1