Toon posts:

[flash] buttons met for-loop, onRelease probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mede flashers,

Ik maak met een for-loop (info komt via php) meerdere movieclips.
In de movieclip zit een textfield en een button.
De text krijg ik aangepast.
Maar hoe krijg ik de onrelease actie van de button aangepast?
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
27
28
29
30
31
mv_video.stop();
maatVars = new LoadVars();
maatVars.handle = "optv";
maatVars.sendAndLoad("media.php",maatVars,"POST");
maatVars.onLoad = function(success) {
    if(success) {

        for (i = 0; i < maatVars.maxid; i++)
        {

            duplicateMovieClip (mc_link, "mc_link" + i, i);
            eval("mc_link" + i).link.text = eval("maatVars.linktext" + i);
            eval("mc_link" + i).bt_knop.onRelease = onReleaseHandler(eval("maatVars.linktext" + i));
            eval("mc_link" + i)._y = i * 20;
            eval("mc_link" + i)._x = 20;
            if(firstvideo!='1'){
                mv_video.setMedia(eval("maatVars.link" + i), "FLV");
                mv_video.play();
            }
            var firstvideo='1';
        } // end of for             
    } else {
        test.text = "fout:\n\nde tekst voor dit onderdeel kon niet geladen worden";
    }
}

function onReleaseHandler(link)
{
    mv_video.setMedia(link, "FLV");
    mv_video.play();
}


wat hier staat werkt dus niet :P

  • supergert
  • Registratie: December 2001
  • Niet online
code:
1
            eval("mc_link" + i).bt_knop.onRelease = onReleaseHandler(eval("maatVars.linktext" + i));

Hier voer je de functie onReleaseHandler(...) uit, en het resultaat ervan wordt in onRelease gezet. Niet helemaal wat je wilt...

Ik denk dat je zoiets moet gaan doen:
code:
1
            eval("mc_link" + i).bt_knop.onRelease = function() { onReleaseHandler(eval("maatVars.linktext" + i)); }

ZX81 > C64 > Amiga > BeBox > PowerMac > pc-klonen...


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 24-11 16:50
supergert schreef op zaterdag 03 maart 2007 @ 23:52:
Ik denk dat je zoiets moet gaan doen:
code:
1
            eval("mc_link" + i).bt_knop.onRelease = function() { onReleaseHandler(eval("maatVars.linktext" + i)); }
En volgens mij gaat dit fout omdat de 2e eval pas uitgevoerd wordt 'onrelease' en dan de i niet meer bekend is.
Volgens mij moet je de hele regel incl. =function in een eval stoppen
zoiets

code:
1
            eval("mc_link" + i +".bt_knop.onRelease = function() { onReleaseHandler( maatVars.linktext" + i  + ") ; }");


je zou ook de i weer uit de movieclipnaam kunnen lezen, of al eerder als member aan de button hangen en 'm dan in de onrelease met een this.linktext oid uitlezen

[ Voor 11% gewijzigd door beetle71 op 04-03-2007 09:10 ]


Verwijderd

Topicstarter
Op die manieren kreeg ik het helaas ook niet de praat. Nu had ik het volgende idee:

Ik zet in de buttons een variabele met daarin de benodigde link en vanuit de button kan ik dan met een onRelease functie die variabelen gebruiken.

_root
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
// tekst laden
mv_video.stop();
maatVars = new LoadVars();
maatVars.handle = "optv";
maatVars.sendAndLoad("media.php",maatVars,"POST");
maatVars.onLoad = function(success) {
     if(success) {
           for (i = 0; i < maatVars.maxid; i++){
            duplicateMovieClip (mc_link, "mc_link" + i, i);
            eval("mc_link" + i).link.text = eval("maatVars.linktext" + i);
            eval("mc_link" + i).bt_knop.linkb = eval("maatVars.link" + i);
            eval("mc_link" + i).bt_knop.media = eval("maatVars.media" + i);
            eval("mc_link" + i)._y = i * 20;
            eval("mc_link" + i)._x = 20;
            if(firstvideo!='1'){
                mv_video.setMedia(eval("maatVars.link" + i), (eval("maatVars.media" + i)));
                mv_video.play();
            }
            var firstvideo='1';
        } // end of for             
    } else {
        test.text = "fout:\n\nde tekst voor dit onderdeel kon niet geladen worden";
    }
}



In de Knop
code:
1
2
3
4
bt_knop.onRelease = function(){
    this._parent.mv_video.setMedia(linkb, media);
    this._parent.mv_video.play();
}


Maar op deze manier worden er geen variabelen aangemaakt binnen de button. Kan dit eigenlijk wel, en zo ja, hoe?

Verwijderd

Topicstarter
Dit lijkt echter ook een probleem op te leveren. Ik krijg namelijk niets vanuit de _parent aangestuurd...

code:
1
2
3
4
5
6
7
bt_knop.onRelease = function(){
    test2.text='afsd';
    
    this._parent.test.text='kom op laat wat zien';
    this._parent.mv_video.setMedia(linkb, media);
    this._parent.mv_video.play();
}

textveld test2 staat in mc waar ook de button in staat, deze kan ik wel laten veranderen.
en textveld test staat in de _parent, deze krijg ik niet veranderd vanuit de duplicated mc.
Deze kan ik uiteraard wel veranderen vanuit de _parent zelf.

[ Voor 16% gewijzigd door Verwijderd op 05-03-2007 09:55 ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 24-11 16:50
code:
1
2
3
4
bt_knop.onRelease = function(){
    this._parent.mv_video.setMedia(linkb, media);
    this._parent.mv_video.play();
}
volgens mij moet je dan niet setMedia(linkb, media) doen maar setMedia(this.linkb, this.media);

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

heeft niemand je ooit verteld dat evel() evil is?! :X

code:
1
this["mc_link" + i].link.text


is veel mooier

overigens kun je niet binnen een for loop een variabele onRelease koppelen, want onRelease is de i idd niet meer uh...i ;)
wat beetle71 zei,

wat wel kan is

code:
1
2
3
4
5
6
7
 for (i=0; i=10; i++) {
  eenknop.maakbutton
  eenknop.foo = "bar"
  eenknop.onRelease() = function() {
   trace(this.foo)
  } 
}


nu wordt de variabele in de knop (of mc dus want met onRelease zijn knoppen niet meer nodig) opgeslagen en opgehaald onRelease

die onrelease code hoeft ook helemaal niet in de knop zelf te staan trouwens (liever niet zelfs)

[ Voor 73% gewijzigd door XangadiX op 05-03-2007 22:58 ]

Stoer; Marduq


Verwijderd

Topicstarter
XangadiX schreef op maandag 05 maart 2007 @ 22:53:
heeft niemand je ooit verteld dat evel() evil is?! :X

code:
1
this["mc_link" + i].link.text


is veel mooier

overigens kun je niet binnen een for loop een variabele onRelease koppelen, want onRelease is de i idd niet meer uh...i ;)
wat beetle71 zei,

wat wel kan is

code:
1
2
3
4
5
6
7
 for (i=0; i=10; i++) {
  eenknop.maakbutton
  eenknop.foo = "bar"
  eenknop.onRelease() = function() {
   trace(this.foo)
  } 
}


nu wordt de variabele in de knop (of mc dus want met onRelease zijn knoppen niet meer nodig) opgeslagen en opgehaald onRelease

die onrelease code hoeft ook helemaal niet in de knop zelf te staan trouwens (liever niet zelfs)
Zo, en ik ben weer terug van wintersport, maar krijg het nog steeds niet goed aan de praat.
Het probleem is nu dat wanneer ik op een door de for-lus geproduceerde knop druk, er wel een venster wordt geopend, echter op de plek waar de variabele hoort te staan, staat UNDEFINED.
Nog ideeën?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
// tekst laden
maatVars = new LoadVars();
maatVars.handle = "krant";
maatVars.sendAndLoad("media.php",maatVars,"POST");
var eerstea='a';
var eersteb='a';
var tel='0';
maatVars.onLoad = function(success) {
    if(success) {
        for (i = 0; i < maatVars.maxid; i++)
        {
            test2.text=i;
            duplicateMovieClip (mc_link, "mc_link" + i, i);
            eval("mc_link" + i).m_imageholder.loadMovie("media/" + eval("maatVars.linktext" + i));
            eval("mc_link" + i).knop.onRelease = function(){
                getURL('media/'+(eval("maatVars.link" + i)),'_blank');
            }
            if(eerstea=='a'){
                eval("mc_link" + i)._y = tel * 60;
                eerstea='b';
                tel++;
            }
            else if(eerstea=='b'){
                eval("mc_link" + i)._y = (tel * 60)-60;
                eerstea='a';
            }
            if(eersteb=='a'){
                eval("mc_link" + i)._x = 20;
                var eersteb='b';
            }
            else if(eersteb=='b'){
                eval("mc_link" + i)._x = 150;
                var eersteb='a';
            }
        } // end of for             
    } else {
        test.text = "fout:\n\nde tekst voor dit onderdeel kon niet geladen worden";
    }
}

  • sanderb
  • Registratie: November 2000
  • Laatst online: 02:13
je quote notabene XangaDix, waar hij precies verteld wat de oplossing voor je probleem is. Daarnaast helpt ie je ook nog extra door je erop te wijzen dat je geen eval("iets"+i) moet gebruiken, maar this["iets+i"]...
Quote je dan gewoon zonder te lezen wat je quote?

Je antwoord staat dus in de reply van XangaDix

" 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
sanderb schreef op vrijdag 23 maart 2007 @ 19:25:
je quote notabene XangaDix, waar hij precies verteld wat de oplossing voor je probleem is. Daarnaast helpt ie je ook nog extra door je erop te wijzen dat je geen eval("iets"+i) moet gebruiken, maar this["iets+i"]...
Quote je dan gewoon zonder te lezen wat je quote?

Je antwoord staat dus in de reply van XangaDix
Ha Sanderb, ik quote niet zonder te lezen. Maar met this["var"+i] krijg ik de boel gewoon niet aan de praat.
Als ik eval("var"+i) gebruik, krijg ik output. Maar als ik this["var"+i] eruit gooi, krijg ik undefined. Vandaar dat ik dat ongewijzigd had gelaten.

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

Verwijderd schreef op maandag 26 maart 2007 @ 09:00:
[...]

Ha Sanderb, ik quote niet zonder te lezen. Maar met this["var"+i] krijg ik de boel gewoon niet aan de praat.
Als ik eval("var"+i) gebruik, krijg ik output. Maar als ik this["var"+i] eruit gooi, krijg ik undefined. Vandaar dat ik dat ongewijzigd had gelaten.
als this[foo+bar] niet werkt dan is er iets mis met je parenting model en moet je kijken waar je variabelen en namen naar verwijzen. Dat doe je door op ctrl+enter te drukken en onder 'debug' even te kijken hoe je objecten heten.

Het is ook niet handig om al die rotzooi in je onLoad te gooien, ik denk dat Flash wel eens kan denken dat hij je mc_link knop in maatvars moet maken, dan is this["mc_link" +i] dus opeens _level0.maatvars.mclink1 en niet _level0.maatvars. Met dat debug knopje kun je dat dus nakijken. Dat mc_link1 undefined is, wil niet zeggen dat hij niet aanwezig is, maar dat hij ergens anders is.

[ Voor 24% gewijzigd door XangadiX op 26-03-2007 19:41 ]

Stoer; Marduq


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

overigens is het XangadiX maar je mag ook "Mijnheer XX" zeggen.

Stoer; Marduq


Verwijderd

Topicstarter
XangadiX schreef op maandag 26 maart 2007 @ 19:37:
overigens is het XangadiX maar je mag ook "Mijnheer XX" zeggen.
Haha, ok Mijnheer XX. Dan ga ik hartelijk danken, want ik ben eruit!!!
Zonder this["var"+i] overigens, want dat kreeg ik maar niet lekker.
Ik had telkens maar niet door dat ik binnen de knop een variabele kon aanmaken. Dus dat jouw foo die gevuld met bar een variabele was. Ik dacht dat je daarmee iets anders bedoelde.
Och het werkt, iedereen bedankt!
Pagina: 1