Copy link to clipboard
Copied
Can someone give me a code example of how I would make my movieclip called 'back1' invisible?
I tried
back1.visible = false;
and got the message in the compiler that this isn't supported in AS3
Yes there is
But you have to plan a bit ahead of what you're going to do. I only use root or parent in the infimous last resort. For one side, this may confuse you if you end the project and want to get back later on. Probably you have forgotten how everything was organized, and you will spent too much time just to figure what is the parent or the root... they have no names.
Last I've always read that everytime this is possible don't use, it's considered bad practice, probably by the reason I sta
...Copy link to clipboard
Copied
That code is fine. Where did you place the code? What is the complete error message?
Copy link to clipboard
Copied
Movieclip A contains movie clips B(back1) and C.
Frame one of movieclip A contains this code:
addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void
{
back1.visible = false;
}
So clip B is intended to start out invisible, then
The script of movie clip C contains a press handler that tells movieClip B to become visible.
The error message generated when Frame one of movieclip A is entered is:
Symbol 'mainContentBox' 1046: Type was not found or was not a compile-time constant: back1.
Copy link to clipboard
Copied
You only need to have the line: back1.visible = false;
An ENTER_FRAME event is not what its name suggests. What it does is it fires at the frame rate of the file, as if it was continuously entering a frame. It has nothing to do with actually entering that frame. So just having that line by itself is sufficient to make it happen in that frame.
As for the error, how is that name assigned to the movieclip B? It should be assigned to the movieclip via entering that name in the Properties panel field shown as <Instance Name> when you select it on the stage. And that movieclip also needs to exist in frame 1 in order for it to be targeted by that code. I would have expected a different error though if mis-naming or non-presence is the issue
Copy link to clipboard
Copied
I took off the event handler and left just the code:
back1.visible = false
but I get the same problem and error message
The name 'back1' is assigned in the Properties panel field, and it is in frame one of the clip.
Copy link to clipboard
Copied
Yes, that listener/handler wouldn't be causing the error, but is not needed for what you were doing.
Is that the entire error message? If you comment out that line do you still get the error?
Can you show a screenshot that includes that movieclip, the timeline, the properties panel and the actionscript (It'll be large)
Also, before you test the file again, go into your Flash Publish Settings and select the option to Permit Debugging. That might add some info to the error message.
Copy link to clipboard
Copied
Well, some progress. I deleted clip B and recreated it from scratch.
Now for some reason the command to make it invisible at the start is working fine.
But the command to make it reappear that is located in movieClip C is not working. I get this message:
ReferenceError: Error #1065: Variable back1 is not defined.
at htmlnewslist2_fla::newsListBox_3/pressHandler()
Any ideas?
thanks for the help
Copy link to clipboard
Copied
For what I understand you need to direct the comand to make back1 visible, to parent. That is, your back1 and movieclip C are in the same level, and want to call back1 inside moviclip C, so you need to tell C where back1 is.
Inside C, try something like:
parent.back1.visible=true;
I usually don't code in timeline, but I would keep every code inside the frame and not in the objects itself. May result in bigger difficulties if you want to debug something.
See if this helps.
Leonel
Copy link to clipboard
Copied
Yes, that worked. (although I had already tried it earlier and it didn't work at that time.)
Wow, I am getting a lot closer, thanks to the help.
What I don't seem to have a handle on is how to get commands across to objects that are residing in different levels. I can use 'parent' and 'root' now, but I don't know how to (for instance) add an event listener(mouse click) to clip B that triggers a removeChild at the root level. If I put the command at the root level, it says the clip B variable is not defined; if I put the command in Clip B it says The supplied DisplayObject must be a child of the caller.
I assume there is some way to direct commands across all these virtual chasms but I cannot find a Help topic that addresses it.
Copy link to clipboard
Copied
Yes there is
But you have to plan a bit ahead of what you're going to do. I only use root or parent in the infimous last resort. For one side, this may confuse you if you end the project and want to get back later on. Probably you have forgotten how everything was organized, and you will spent too much time just to figure what is the parent or the root... they have no names.
Last I've always read that everytime this is possible don't use, it's considered bad practice, probably by the reason I stated earlier, or even others.
For example you have a MovieClip A and inside it a MovieClip B. if you want to call a method of B from A, well it's easy mvB.methodToCall(), right?
But consider this. You want to remove B with a button that is inside B. You can't, because the compiler will tell you that, the child must be removed from the parent, i.e., from B you have to remove it from A.
Two options: whether you remove with a parent call, or you can do it wil a function callback.
This last option is what I always do, with no trouble at all. Basically when you instantiate B, one of the arguments will be a method name, that exists in A... say deleteB(). When you press the button in B to delete it, B will call this function, that it knows it's in A, then the A removes B.
It's simpler than it sounds.
Visit this blog entry, that has an example of how to do it.
http://as3snippets.blogspot.com/2010/08/function-call-back.html
Try with a basic example justo test it, and then move to your project.
I think it's very clear, but be free to ask.