[Flash MX 2004] Component in component constructor werkt nie

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Ik ben mezelf aan het omscholen naar AS 2.0.

Op zich geen probleem (beetje veel nutteloze rommel imho).

Nu heb ik echt een component gemaakt (gewoon een extends Movieclip dus) en in deze component zit een andere (MenuBar component van Macromedia zelf).

in mijn eigen classe doe ik in de constructor:

Flash ActionScript:
1
2
3
4
5
6
7
8
public class myClass extends MovieClip
{
    var mMenu:MenuBar;
    public function myClass()
    {
        mMenu.visible = false; //yep not _visible... wonder what a 'menu' is then?
   }
}


maar dat doet niets. mMenu geeft ie mooi terug als zijnde wat het is (want het staat in het component op de 1ste frame + export on first frame etc).

mMenu.visible geeft echter 'undefined'

dit terwijl MenuBar afleid van UIObject dat WEL visible heeft.

Wat het nog gekker maakt is dat als ik het niet in de constructor doe maar in een event van ietsie later (ie dus niet on startup) het er plots wel IS en WERKT...

het lijkt alsof de code er op het moment van de constructor er nog niet 'is' maar pas later.

BTW een instance van myClass (en dus van Menubar) staat al gewoon op de timeline dus er worden geen classes aangemaakt 'on the fly'.

Heb al wat gezocht maar vind het niet.

Nu weet ik uit ervaring dat met AS1.0 ik (als ik een swf laadde) ook steeds 1 volle frame wachtte voor ik iets durfde aanroepen. Maar nooit alles alles er al staat?...

Over menubar zal ik maar zwijgen behalve dat ik nooit zo'n slechte UI-API heb gezien en wacht dan ook af voor 8Ball waarin ik hoop dat ze Grant Skinners UI gaan gebruiken...

Verwijderd

Ik zie dat je in je klasse een referentie van het type MenuBar defineerd. Maar dit maakt natuurlijk nog geen MenuBar instantie.

Als je bijv. zegt

var i : Number;

Heb je wel een variable gedefineerd waar je een waarde in kan stoppen maar deze variable heeft nog geen waarde en is dus undefined.

Omdat je MenuBar object niet bestaat is er ook geen property visible en krijg je dus undefined terug.

Voor je andere probleem moet je de doLater method gebruiken die in UIObject is gedefineerd. Je kunt hiermee een method op het volgende frame laten aanroepen om je components te initialiseren. Volgens mij staat er een uitleg in de documentatie van doLater in de klasse UIObject.

Success!

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

hobbit_be schreef op vrijdag 09 september 2005 @ 16:24:
Over menubar zal ik maar zwijgen behalve dat ik nooit zo'n slechte UI-API heb gezien en wacht dan ook af voor 8Ball waarin ik hoop dat ze Grant Skinners UI gaan gebruiken...
Kun je lang wachten 8-)

Defineer een onLoad methode in je klasse, dan is mMenu niet meer undefined. Als je extend van UIObject worden zulke dingen trouwens al netjes voor je afgehandeld.

HTH :)

"You're only as good, as what you did last week."


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
hemeltje wat een rotzooi allemaal :)

sorry voor late reply had intussen gewoon het ergens anders aangesproken (niet 1st frame). Maar per toeval stootte ik alweer of eenzelfde issue en ben dus maar even gaan terugkijken.

als ik een een movieclip/component (ie NIET UIObject gewoon zonder v2) creer in de lib en daarin gewoon een andere 'simpele' component zet (ie gewoon weer een ander movieclip component) dan gebeurt hetvolgende:

ie doe via attachMovie een instance van de grote clip (met daarin dus al de andere component die gewoon gebruikt wordt).

1) constructor main movieclip
2) gezooi (wat ander spul waarin is dus eg: die submovieclip al positioneer)
3) de volgende frame de constructor van de submovie clip.

Dwz dat ik in de constructor dus nooit iets heb wat er in feite al staat op die frame (ie de code van de subcomponent is dus nog eens een frame later klaar)?...

Dwz dat ik dan beter in mijn eerste constructor via een attachMovie het subobject plaats ipv dat het er al staat omdat ik dan zeker ben dat het dan al is...

dit is geen OOP meer dit is geklungel :)