[Actionscript/Flash] Functie aanroepen van andere MC

Pagina: 1
Acties:

  • edie
  • Registratie: Februari 2002
  • Nu online
Ik ben eens even wat aan het experimenteren met dynamisch Flash, en dus dacht ik: 'Hee, laat ik eens een dynamisch menu gaan maken.'

Zo gezegd, zo gedaan (*kuch kuch*).

Ik weet dat ik het fout doe, maar zo werkt het tenminste nog gedeeltelijk. :p

Ik heb in mijn library 3 componenten zitten:
Menu, MenuItem en SubMenuItem.

Bij alle componenten heb ik 'Export for ActionScript' aangevinkt (en een naampje gegeven) en 'Export in first frame' aangevinkt. Dit werkt allemaal al.

Nu heb ik in Menu alle functionaliteit gebouwd om de gegevens op te halen en de menuitems toe te voegen. Dit werkt.

In het component MenuItem zit een dynamic text, genaamd label. Ik wil de tekst van het label instelling via een functie setText. Deze wil ik kunnen aanroepen in mijn Menu component.

Klein voorbeeldje:
code:
1
2
3
4
5
6
7
/*
  MenuItem
*/
function setText( cText )
{
    label.text = cText; 
}

Bovenstaande code zit in het eerste frame van het MenuItem component (die dus in de library zit).

In Menu doe ik het volgende:
code:
1
2
3
4
5
var name = "menuItem1";
attachMovie( "MenuItem", name, 100 );   
var oObject = eval( name );
oObject.setText( "Bestand" ); // Werkt niet!
oObject.label.text = eval( "Bestand" ); // Werkt WEL!

De laatste regel doet het wel (het object bestaat dus), maar die daarboven, waar ik de functie setText aanroep, doe het niet.

De setText functie declaratie heb ik al op verscheidene manieren geprobeerd (setText.prototype = function( cText ), etc)

Wat doe ik fout? (je hebt nog 5 seconden)

edit:

Kleine toevoeging... dit doet het wel, maar alleen als ik onderstaande code in mij Menu object zet...
[code]
MovieClip.prototype.setText = function( cText )
{
if ( typeof( eval( "this.label" ) ) === "object" )
{
label.text = cText;
}
}
[/code]
Maar zo krijg ik het voor elke MC. En dat wil ik niet. Ik wil het alleen voor MIJN MC hebben...

[ Voor 17% gewijzigd door edie op 01-01-2003 15:35 ]

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Zet eens in die functie setText het volgende erbij
trace("asd");
Laat ie dat dan wel zien? Maw, voert ie die functie wel uit?

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • edie
  • Registratie: Februari 2002
  • Nu online
Ik heb er een breakpoint in staan, maar hij komt er nooit (hij voert de functie dus niet uit).
Ik moet iets verkeerd doen, maar ik weet niet wat ;( :/

[ Voor 14% gewijzigd door edie op 01-01-2003 20:18 ]

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Verander
attachMovie( "MenuItem", name, 100 );
var oObject = eval( name );

Eens in
var oObject = attachMovie( "MenuItem", name, 100 );


Volgens mij geeft eval alleen variabelen af en geen objecten en properties

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • edie
  • Registratie: Februari 2002
  • Nu online
Alleen jammer dat attachMovie niks teruggeeft...

http://www.macromedia.com...script_dictionary508.html

Maar
code:
1
oObject.label.text = 'blaat';

doet het wel.

* edie vindt het vervelend dat het nergens is uitgelegd in de help

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

En as je die functie nou eens in de _root zet en dan aanroepen met _root.setText()

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

eddie19 schreef op 02 januari 2003 @ 13:42:
Alleen jammer dat attachMovie niks teruggeeft...

http://www.macromedia.com...script_dictionary508.html

Maar
code:
1
oObject.label.text = 'blaat';

doet het wel.

/me vindt het vervelend dat het nergens is uitgelegd in de help
wrong....

attachMovie geeft een referentie naar de geattachde movieclip terug.

  • edie
  • Registratie: Februari 2002
  • Nu online
Verwijderd schreef op 02 januari 2003 @ 15:43:
[...]


wrong....

attachMovie geeft een referentie naar de geattachde movieclip terug.
Niet volgens de documentatie ;)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • edie
  • Registratie: Februari 2002
  • Nu online
XLerator schreef op 02 January 2003 @ 15:40:
En as je die functie nou eens in de _root zet en dan aanroepen met _root.setText()
Tja. Dan kan elke MC met die functie werken. Dat is nou ook weer niet de bedoeling.

Ik ben OO programeren gewent, en dan kan zoiets 'simpels' niet. (ik weet het wel op te lossen, maar dan heb ik niks aan mijn libary objecten ;))

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


Verwijderd

Inderdaad, maar aangezien de interne functies van mx ze ook gebruiken kan je aannemen dat je deze undocumented feature safe kan gebruiken:
(voorbeeld met createEmptyMovieClip.)

code:
1
2
var a = this.createEmptyMovieClip('t_1', _global.d++);
trace(a);


traced: _level0.t_1

Verwijderd

eddie19 schreef op 02 January 2003 @ 15:59:
[...]

Tja. Dan kan elke MC met die functie werken. Dat is nou ook weer niet de bedoeling.

Ik ben OO programeren gewent, en dan kan zoiets 'simpels' niet. (ik weet het wel op te lossen, maar dan heb ik niks aan mijn libary objecten ;))
Klopt....ik deed het ook heel lang.....gewoon movieclip class extenden....is erg onefficient....nou ja, misschien dan niet voor de movieclip.scale(); method :)

je kan beter een nieuwe class maken hiervoor.

  • edie
  • Registratie: Februari 2002
  • Nu online
Verwijderd schreef op 02 januari 2003 @ 16:02:
Inderdaad, maar aangezien de interne functies van mx ze ook gebruiken kan je aannemen dat je deze undocumented feature safe kan gebruiken:
(voorbeeld met createEmptyMovieClip.)

code:
1
2
var a = this.createEmptyMovieClip('t_1', _global.d++);
trace(a);


traced: _level0.t_1
Nou, ok dan. Zal ik het over 3 uur (als ik thuis ben) wel even proberen.

Maar ik denk dat het weinig zal uitmaken, aangezien hij de functie niet (her)kend.

[ Voor 5% gewijzigd door edie op 02-01-2003 16:13 ]

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


Verwijderd

ja, maar wat jij wil is een class maken, is dat dan wat je niet vat?

  • edie
  • Registratie: Februari 2002
  • Nu online
Verwijderd schreef op 02 januari 2003 @ 16:27:
ja, maar wat jij wil is een class maken, is dat dan wat je niet vat?
Wat is (in Flash) het verschil tussen een class en een library object?
Ik wil idd met classes werken; kan ik veel inteligentie kwijt in de classes.

Maar ik wil ook een animatie kunnen invoegen in de MC. Bijvoorbeeld uitschuivende submenu's (en dat wil ik niet allemaal coderen ;)).

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • edie
  • Registratie: Februari 2002
  • Nu online
Verwijderd schreef op 02 January 2003 @ 16:02:
Inderdaad, maar aangezien de interne functies van mx ze ook gebruiken kan je aannemen dat je deze undocumented feature safe kan gebruiken:
(voorbeeld met createEmptyMovieClip.)

code:
1
2
var a = this.createEmptyMovieClip('t_1', _global.d++);
trace(a);


traced: _level0.t_1
Nou, ik heb het geprobeerd en nog steeds niks. :'(
Hmmz...

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • edie
  • Registratie: Februari 2002
  • Nu online
Nou, ik ben eruit!

Ik heb bij elke functie die ik aanroep een trace gezet. (Hierzo)

En wat blijkt: De functies in de libraryobjecten die ik toevoeg via attachMovie bestaan op dat moment nog niet.

Pas als ik uit mijn menu-opbouw-frame kom, worden de andere(n) gespeeld (Te zien aan de 'Function: init of ....' op het laatst). Dan pas worden de functies aangemaakt.

Hoe kan ik dit anders doen?

edit:

En met oObject.play() wordt de init() ook niet aangeroepen...

[ Voor 10% gewijzigd door edie op 02-01-2003 21:56 ]

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • edie
  • Registratie: Februari 2002
  • Nu online
Na nog wat meer speurkwerk heb ik het volgende gevonden:
code:
1
2
3
4
5
6
7
#initclip 1
this.__proto__.setText = function( cText )
{
  this.label.text = cText;
  trace( "Function setText called on " + this + " with '" + cText + "'" );
}
#endinitclip

Alleen geld dit (ook) weer voor alle MC's. Maar dit is het beste dat ik ervan kan maken. :)

Dank jullie allen voor de hulp _/-\o_

[ Voor 8% gewijzigd door edie op 03-01-2003 19:50 ]

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert

Pagina: 1