If you place an instance on stage when a document class is in use, you 
must declare that instance in the document class as well.

In your case below, you need to declare square_mc in your document
class FlexToFlashMain:

  public var square_mc:SquareMC; /* or whatever type it is */ 

It must be public.

When the class is instantiated, the Flash Player creates any movie
clip instances laid out on the current timeline frame.  For each of
those instances, it tries to set the corresponding member variable in 
the document class.  The member variable name is the movie clip's
instance name, in this case square_mc.

> Adobe guys, is this correct? My understanding from looking around is
that
> with the document class in Flash 9, you can only add items to the stage 
> through code.

So the answer here is... You can add items to the stage graphically.
But you need to also add them in your document class code, if you're
not letting the tool generate the document class automatically for you 
(which is what happens when you don't specify a document class)

In a future version of Flash, it'd be nice if there was a "code
behind" feature that automatically added the member variable for you. 
But that's not currently available.

One alternate way to do it (kind of a cop-out but it'll work) is to
declare your document class dynamic.  Then the Flash Player will
succeed when it tries to set the square_mc member variable even if the 
square_mc variable has not been declared in the class definition.

Gary

--- In flexcoders@yahoogroups.com, slangeberg <[EMAIL PROTECTED]> wrote:
>
> Mike,
> 
> I tried setting up a document class for Flash 9, but when you place
named
> items on stage, you get this error:
> 
> ReferenceError: Error #1056: Cannot create property square_mc on
> com.cpile.flextoflash.FlexToFlashMain.
>     at flash.display::Sprite/flash.display:Sprite::constructChildren()
>     at flash.display::Sprite$iinit()
>     at flash.display::MovieClip$iinit()
>     at com.cpile.flextoflash::FlexToFlashMain$iinit()
> 
> Adobe guys, is this correct? My understanding from looking around is
that
> with the document class in Flash 9, you can only add items to the stage
> through code. That seems to negate a lot of the advantage of using a
> graphical interface... ok, so you could have a clip in your library
that has
> the stage set up... hmmm that may do it! I'll write back when I have
> something. Otherwise, what i have sent is an effective way to access
items
> on the stage.
> 
> -Scott
> 
> On 2/16/07, slangeberg <[EMAIL PROTECTED]> wrote:
> >
> > Yeah, sorry. I'm not 100%, but you should be able to reference
your loaded
> > movie by that class type (your document class), from within Flex.
I believe
> > another gentleman referred to that, in this thread. Hold on, I did
it, with
> > a loader... I'll try to attach code.
> >
> > The proxy is just a design idea, meaning you define an interface
to your
> > movie in your class, instead of referencing elements within the
movie from
> > Flex. Then, the only thing that will break your flash / flex
connection is
> > to break that interface. For instance, your map(?) class could have
> > functions like:
> >
> > showPlat( id:Object );
> >
> > where the class implementation can decide what to do with the call,
> > instead of having your flex app nose through the contents. That's
a good
> > design practice to get into:
> >
> > 'Always code to interfaces, not implementations.'
> >
> > Ok, so here's one of those do as I say, deals.. Also, my
implementation
> > may be a bit different here, than what we were talking about. This
was a
> > quick fix to enable custom loading logic, for the default Flex 2
application
> > loading bar. In this case, I'm actually assigning the class under the
> > 'linkage' option of my library clip (progress bar) to point to:
> > com.tc.view.preload.ProgressBarSymbol, and publishing in Flash 9.
Then,
> > when you instantiate the class in Flex 2, you'll get a direct
link. In your
> > case, i would suggest a document class, for the entire movie.
> >
> > //I just used this class to enable me to access a loading bar
quick. If
> > this was going to
> > //scale / change, I would have defined public methods to update
this view.
> >
> > //I swear!!
> > package com.tc.view.preload
> > {
> >     import flash.display.*;
> >     import flash.text.TextField;
> >
> >     [Embed(source="/library.swf", symbol="
> > com.tc.view.preload.ProgressBarSymbol")]
> >     public class ProgressBarSymbol extends Sprite
> >     {
> >         public var progress_bar:MovieClip;
> >         public var loading_text:TextField;
> >     }
> > }
> >
> > //And instantiated in Flex 2 by using:
> >
> > var bar:ProgressBarSymbol = new ProgressBarSymbol();
> > this.addChild( bar );
> >
> > Hope this gives ideas, not confusion!
> >
> > -Scott
> >
> > On 2/16/07, Mike Anderson < [EMAIL PROTECTED]> wrote:
> > >
> > >    Hello Scott (in particular) :)
> > >
> > > You mentioned a "Proxy" - what you do mean by this exactly?
> > >
> > > Is this supposed to be some custom class that I write?  If so,
what is
> > > supposed to be contained within it?
> > >
> > > I did read up on the Document Object, and I am now doing my
Flash 9 FLA
> > > files with a custom Document Class, representing the Root
Timeline.  I am
> > > pretty sure I did it right, since I am getting no compile errors.
> > >
> > > But my question is, is the AS3 Class File I used for the Document
> > > Object, strictly used for the FLA file?  Or is this also used
inside of Flex
> > > Builder, after I bring the external SWF file in?
> > >
> > > This is where I am getting a little confused.
> > >
> > > All the articles I find on this topic, covers the Flash side of
things -
> > > and they never take that next step, and tell you how to
reference it inside
> > > of Flex.
> > >
> > > If you have anything else on this topic, I'd really be grateful
for your
> > > help.
> > >
> > > Thanks,
> > >
> > > Mike
> > >
> > >  ------------------------------
> > > *From:* flexcoders@yahoogroups.com
[mailto:[EMAIL PROTECTED] *On
> > > Behalf Of *slangeberg
> > > *Sent:* Wednesday, February 14, 2007 10:53 AM
> > > *To:* flexcoders@yahoogroups.com
> > > *Subject:* Re: [flexcoders] Can't we access MovieClips contained in
> > > embedded SWF's?
> > >
> > > If you are using Flash 9, you can use a document class (I
believe) at
> > > the root level and have Flex reference it by that. Your document
class would
> > > set up an API, so you don't have to peer into the movie itself.
Basically a
> > > proxy. Sorry I don't have the implementation in front of me, but
I believe
> > > it's possible.
> > >
> > > So, if previous code was correct, could do something like:
> > >
> > > var platProxy:YourProxy =
platObject.getChildByName('instancename') as
> > > YourProxy
> > > platProxy.hideAll();
> > > platProxy.showByID( {id:'plat_xxx'} );
> > >
> > > Just an idea!
> > >
> > > -Scott
> > >
> > > On 2/14/07, Mike Anderson <[EMAIL PROTECTED]> wrote:
> > > >
> > > >    Oh man, you are kidding me!
> > > >
> > > > See, this particular SWF is a Plat Overview of a subdivision - and
> > > > there are 140 Lots, each individually defined as a unique
MovieClip.
> > > >
> > > > So, if I need access to each MovieClip programmatically, I
will have
> > > > to define 140 variables?
> > > >
> > > > Now that would be a bummer :-(
> > > >
> > > > Could you clarify on that?
> > > >
> > > > Thank you for the information nevertheless - I was actually
going to
> > > > try the getChild method next, so that saves me some time.
> > > >
> > > > Mike
> > > >
> > > >  ------------------------------
> > > > *From:* flexcoders@yahoogroups.com [mailto:
[EMAIL PROTECTED]
> > > > *On Behalf Of *Matt Wicks
> > > > *Sent:* Wednesday, February 14, 2007 10:18 AM
> > > > *To:* flexcoders@yahoogroups.com
> > > > *Subject:* Re: [flexcoders] Can't we access MovieClips
contained in
> > > > embedded SWF's?
> > > >
> > > >  You need to get the object as a display object
> > > > var xxx:MovieClip = platObject.getChildByName('instancename') as
> > > > MovieClip
> > > >
> > > > Matt
> > > >  On 14 Feb 2007, at 16:13, Mike Anderson wrote:
> > > >
> > > >   Hello all,
> > > >
> > > > I have a Flash Player 9, AS3 version of a SWF that I am
bringing into
> > > > Flex, using the SWFLoader Component.
> > > >
> > > > Once I bring the SWF in, I am creating a MovieClip variable and
> > > > assigning to it, the SWFLoader.content. Here is a quick code
example:
> > > >
> > > > var platObject:MovieClip = mySWFLoader.content;
> > > >
> > > > So once that assignment is made, you can execute certain built-in
> > > > methods available to any Flash Movie - for example:
> > > >
> > > > platObject.play ( );
> > > > platObject.loaderIn fo.[etc]
> > > > And so on...
> > > >
> > > > That is all well and good - but what about MovieClips that
reside in
> > > > the
> > > > Root Timeline? In this particular SWF File, I have a MovieClip
called
> > > > "platMovieClip" - and I am trying to access it's properties and
> > > > methods
> > > > from within Flex. For example, I'd like to toggle the
visibility, so I
> > > > tried this code:
> > > >
> > > > platObject.platMovi eClip._visible = false;
> > > >
> > > > When I try this command, I get an error that says "the property
> > > > platMovieClip is unknown" or something to that effect...
> > > >
> > > > If we can't access the assets that reside in SWF Files, then
what is
> > > > the
> > > > whole point of all this? Or maybe there is something that I am
> > > > overlooking - but as far as I can tell, the platObject should
> > > > represent
> > > > the SWF...
> > > >
> > > > Could any of you shed some light on this topic for me? This
> > > > functionality is VERY important to the success of my website
launch.
> > > >
> > > > Thanks in advance,
> > > >
> > > > Mike
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > >
> > > : : ) Scott
> > >
> > >  
> > >
> >
> >
> >
> > --
> >
> > : : ) Scott
> 
> 
> 
> 
> -- 
> 
> : : ) Scott
>


Reply via email to