Avatar billede alexander_j Nybegynder
27. maj 2002 - 14:58 Der er 26 kommentarer og
1 løsning

Funktioner og variabler ???

Ok jeg indrømmer det - jeg har ikke forstået actionscript i flash helt til bunds endnu :-(

Jeg har fem knapper 'button1-5' og jeg har fem variabler 'id1-5' og een 'tom' variabel 'id' som er bestemmende for hvad der sker!!!
Ideen var så at når man trykkede på 'button1' så blev variablen 'id' lig med variablen 'id1' - tilsvarende med de andre knapper.

Koden jeg bruger ser sådan ud:
for(i=1; i<=5; i++) {
  _root["button"+i].onRelease = function()
    {
      _root.id=_root["id"+i];
    }
}

Problemet som jeg ser det er, at i har den pågældende værdi (1-5) når funktionen defineres, men når funktionen kaldes, har i skiftet værdi!

Er der en barmhjertig sjæl der har en kreativ løsning på problemet?

Jeg har naturligvis simplificeret min kode her - og er udemærket klar over at brug af denne kode ( '_root.button.onRelease = function() {...}' ) er en besværlig sag til så få knapper!

Vh. Alexander
Avatar billede hoejrup Nybegynder
27. maj 2002 - 15:05 #1
Har du prøvet med _root.id= "id"+i; ?

/per
Avatar billede hoejrup Nybegynder
27. maj 2002 - 15:06 #2
Eller _root.id = eval("id"+i);

/per
Avatar billede alexander_j Nybegynder
27. maj 2002 - 15:51 #3
Det er muligvis svært forståeligt, hvad jeg mener! Derfor prøver jeg lige igen - Jeg har lavet følgende kode, som eksempel på hvad jeg mener - sæt den ind i frame 1 i et tomt movieclip!:

for(i=1; i<=5; i++) {
    _root["id"+i]=i;
    _root.createEmptyMovieClip("button"+i, i);
    _root["button"+i].createTextField("tekst",1,0,0,100,20);
    _root["button"+i].tekst.text = "Dette er min tekst "+i;
    _root["button"+i].tekst.border = true;

    _root["button"+i]._x = 25;
    _root["button"+i]._y =25*i;

    _root["button"+i].onRelease = function(i) {
        _root.id=_root["id"+i];
    }
}

stop();

Hvordan får jeg '_root.id' til at få samme værdi som id1 til id5 når man trykker på button1 til button5???


Vh. Alexander


Ps. hoejrup --> Jeg prøvede dine forslag uden succes - desværre ;(
Avatar billede paask Nybegynder
27. maj 2002 - 16:17 #4
Lidt cowboytrick, men virker:

_root["button"+i].onRelease = function(i) {
    _root.id = "id"+this._name.slice(6);
}
Avatar billede barklund Nybegynder
27. maj 2002 - 16:18 #5
Hey...

Du skal som du selv er inde på først definere variablen på movieclippet...

Derudover har jeg gjort din kode lidt mere overskuelig :o)


for(i=1; i<=5; i++) {
    with( _root.createEmptyMovieClip("button"+i, i)) {
createTextField("tekst",1,0,0,100,20);
    tekst.text = "Dette er min tekst "+i;
    tekst.border = true;
    _x = 25;
    _y = 25*i;
id = "id"+i;
    onRelease = function(i) {
          _root.id=this.id;
    }
}
}

Kan det bruges?

/Barklund
Avatar billede barklund Nybegynder
27. maj 2002 - 16:21 #6
Hvis det er blevet lidt for smart og så ikke virker, så lav bare:

for(i=1; i<=5; i++) {
  var btn = _root.createEmptyMovieClip("button"+i, i);
  btn.createTextField("tekst",1,0,0,100,20);
    btn.tekst.text = "Dette er min tekst "+i;
    btn.tekst.border = true;
    btn._x = 25;
    btn._y = 25*i;
  btn.id = "id"+i;
    btn.onRelease = function(i) {
          _root.id=this.id;
    }
}
Avatar billede barklund Nybegynder
27. maj 2002 - 16:22 #7
Hov... hvad laver det der "i" i function-definitionen? Det skal ud! For onRelease-funktionen bliver jo kaldt af flash selv, så den får skam ingen argumenter med!!!
Avatar billede paask Nybegynder
27. maj 2002 - 16:23 #8
Hehe præcist, jeg sad også lige og stenede over det :0)
Avatar billede hoejrup Nybegynder
27. maj 2002 - 16:29 #9
alexander_j> Skidt pyt med det, jeg kan se at du arbejder med Flash MX. Jeg sidder stadigvæk og slås med Flash 5. :o)

/per
Avatar billede barklund Nybegynder
27. maj 2002 - 16:35 #10
Er der noget, der virker?
Avatar billede hoejrup Nybegynder
27. maj 2002 - 16:52 #11
Har du prøvet med _root.id= eval(_root["id"+i]);

/per
Avatar billede barklund Nybegynder
27. maj 2002 - 16:55 #12
>> hoejrup

Da onRelease-funktionen ikke i sin definition beregner denne værdi, men først beregner den, når der bliver trykket på knappen, så vil "i" altid være 6... Den har kun værdierne 1-5 i meget kort tid mens scriptet udføres. Derfor skal den gemmes i en "lokal" tekststreng i knappen, så den altid kan hentes. Man kan også som paask foreslår det hente den fra knappens statiske instance-navn...
Avatar billede alexander_j Nybegynder
27. maj 2002 - 17:00 #13
barklund --> Umiddelbart ser dit andet forslag ud til at virke - jeg vil lige prøve det efter i mit rigtige script! :-)

hoejrup --> np

paask --> udemærket cowboytrick, men det skaber desværre nye problemer, hvis jeg fx satte løkken til at køre mellem 1 og 20, da den kun tager højde for eet ciffer!
Avatar billede barklund Nybegynder
27. maj 2002 - 17:04 #14
Jeg tolker, at jeg skal smide et svar(?)...
Avatar billede barklund Nybegynder
27. maj 2002 - 17:05 #15
Forresten så laver paask's løsning en slice() fra den 6 karakter og frem til slutningen af strengen - den ville altså tage alle cifre med uanset længde...
Avatar billede alexander_j Nybegynder
27. maj 2002 - 17:05 #16
barklund --> kan du lige kort forklare mig hvad der sker, når man skriver:
  var btn = _root.createEmptyMovieClip("button"+i, i);

???
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:05 #17
barklund> Tak, så kan jeg bedre forstå det.

/per
Avatar billede barklund Nybegynder
27. maj 2002 - 17:09 #18
createEmptyMovieClip() står til ikke at returnere noget som helst i dokumentationen. Så kunne man have lavet:

parent.createEmptyMovieClip(name,depth);
newmovie = parent[name];

Og så har man i "newmovie" en direkte reference til det nye movieclip istedet for at man skal skrive "parent[name]" hver gang. Men i virkeligheden har det vist sig, at createEmptyMovieClip() rent faktisk helt af sig selv returnerer en reference til det nye movieclip. Derfor kan ovenstående bare skrives som:

newmovie = parent.createEmptyMovieClip(name,depth);

Og "newmovie" refererer så direkte til clip'et... Dette kan bruges som:

newmovie._x;

Som er det samme som:

parent[name]._x;

Okay?

/Barklund
Avatar billede barklund Nybegynder
27. maj 2002 - 17:10 #19
Nåja... "var" er et foruddefineret ord, der sørger for at den efterfølgende variabel kun findes inden for det kaldende scope - den inderste blok. Her er det kaldt inden i "for"-blokken, så i starten af næste gennemløb er variabel ukendt og der er den også, lige så snart man kommer uden for løkken i bunden... men det vidst du måske?
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:14 #20
>>Barklund  var betyde definition af en lokal variabel. Men vi kan alle sammen glemme... :o)

/per
Avatar billede barklund Nybegynder
27. maj 2002 - 17:16 #21
jaa... skrev jeg ikke det?
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:20 #22
Jeg kender ikke alle de specielle betegnelser som scope, og inderste blok. Det betyder en definition af en lokal variabel ifølge min bog.

/per
Avatar billede alexander_j Nybegynder
27. maj 2002 - 17:22 #23
1000 tak for hjælpen allesammen :-)

Pyha - jeg troede jeg havde fat i noget omkring actionscript, men der er nogen her der er kommet noget længere end mig!
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:23 #24
Velbekomme! :o)

/per
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:25 #25
alexander_j> Der vil altid være nogle der er bedre, og det gælder for os alle sammen. Men øvelse gør mester....

/per
Avatar billede barklund Nybegynder
27. maj 2002 - 17:26 #26
Jeg kan se, at jeg endte med at få alle pointene, som var lige vel i overkanten.. hvis nogen føler, at de har lyst til lidt af dem, så bare smider en kommentar...

Ellers mange tak for point, alexander_j... Held og lykke...

Men det ser ud som om, at du har fået rimeligt godt fat i at udnytte Flash MX og dens muligheder med selv at lave knapper og movieclips undervejs... go for it!
Avatar billede hoejrup Nybegynder
27. maj 2002 - 17:41 #27
barklund> Nope, du har fuldt ud fortjent dem!

/per
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester