-
Button not working?
I can't believe this but I can't seem to get a button to work. I have tried movieClips and button symbols but nothing works. I have an initial frame that has a set of buttons and each button has a listener and function like so:
btn_second_main.addEventListener(MouseEvent.MOUSE_ UP, eventHandler_main);
function eventHandler_main(event:MouseEvent):void {
if (event.target.name == "btn_second_main") {
gotoAndStop(2);
} else if (event.target.name == "btn_third_main") {
gotoAndStop(3);
} else {
// do nothing
}
}
And i have a frame that stretches from frame 2 to frame 6 that a different set of buttons and each one of them has a listener and a function like so:
btn_second.addEventListener(MouseEvent.MOUSE_UP, btnHandler);
function eventHandler(event:MouseEvent):void {
if (event.target.name == "btn_second") {
gotoAndStop(2);
} else if (event.target.name == "btn_third") {
gotoAndStop(3);
} else {
// do nothing
}
}
...every time i click on the first button on frame 1 and it takes me to frame 2 where the second set of buttons starts all of the second set of buttons work fine. But, when i click on any of the buttons on frame 1 (other than the first one) and it takes me to a frame other than just frame 2 none of the second set of buttons works.
Please, please help. This is the most simple concept but I just can't seem to get it to work.
-
Can you attach your source file?
-
Here is a link to the site (not working):
http://www.cgmonster.com/test.html
And here is a link to the file to download:
www.cgmonster.com/test.fla
Please let me know if you can figure it out.
-
I can't even test the file without the libraries you're using. I don't have "TweenMax". Have you tried tracing the button names from the 3rd frame to make sure they're registering correctly? Have you tried tracing the swfPathName to make sure it's correct for each button press?
On a side note, you don't have to use "MOUSE_UP" on your events. You can use "MouseEvent.CLICK" and achieve better functionality.
-
Well I'm not sure what you mean by tracing the "swfPathName" but I have tried tracing the event.target.name and it only works when I go to frame 2 and then go to another frame from there. On any other frame than the first to start, the buttons just dont respond at all. This is very confusing how it works sometimes and not others.
FYI: If you delete everything on frame 5 of the "pages" layer (other than the buttons obviously) it should work and shouldn't ask you for TweenMax anymore. That is just a good tweening library that I downloaded.
Please let me know if you can figure this out. This is SO frustrating.
Last edited by Jr-; 06-18-2009 at 01:37 AM.
-
In the "frame 3d" movie clip, I just added a couple of trace statements to make sure they're working. There's a variable called "swfPathName". I traced it to make sure it had a valid url name in it. You'll see it below. Also, below the code, I'll paste what it's tracing and the errors I'm getting.
PHP Code:
stop();
////////////////////////////////////////////////////////////// // Different Model Button Press Listeners //////////////////// //////////////////////////////////////////////////////////////
// ButtonModes below omitted because buttons are not MovieClips // btn3d_cmon.buttonMode = true; btn3d_cmon.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_gpt.buttonMode = true; btn3d_gpt.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_guit.buttonMode = true; btn3d_guit.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_kart.buttonMode = true; btn3d_kart.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_lara.buttonMode = true; btn3d_lara.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_sw.buttonMode = true; btn3d_sw.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_wild.buttonMode = true; btn3d_wild.addEventListener(MouseEvent.MOUSE_UP, buttonPress); // btn3d_wc.buttonMode = true; btn3d_wc.addEventListener(MouseEvent.MOUSE_UP, buttonPress);
// NetConnection object (for NetStream) var myNetConnection:NetConnection; // NetStream object var myNetStream:NetStream; // Sound object var mySound:Sound; // LocalConnection object var myLocalConnection:LocalConnection;
// Create Loader to load movieClip into "holder" var loader:Loader = new Loader();
////////////////////////////////////////////////////////////// // Load turn around into "holder" function /////////////////// //////////////////////////////////////////////////////////////
function buttonPress(evt:MouseEvent):void { // Go to frame TWO gotoAndStop(2); // Unload Clip if not null if (loader.content != null) { /////////////////////////////////////////////// // http://www.youtube.com/watch?v=8hAIW0ppDww /////////////////////////////////////////////// //holder.removeChild(loader); //trace("not Null"); } // Get Button Name onClick var btnName = evt.target.name; // trace("Button Name: " + btnName); if (btnName != "") { // Remove prefix from button name trace("name: " + btnName) var btnNameTruncated = btnName.substr(6, btnName.length); // Set path and name of swf to load var swfPathName = btnNameTruncated + ".swf"; trace(swfPathName); } else { trace("Button instance name is null"); } holder.addChild(loader); loader.load(new URLRequest(swfPathName)); }
I'm getting these errors because I don't have the SWFs to load.
name: btn3d_cmon
swfPathName: cmon.swf
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
name: btn3d_guit
swfPathName: guit.swf
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
name: btn3d_lara
swfPathName: lara.swf
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.
-
Oh, that's for the 3d turn arounds that I have. I know that I am getting those errors. Even when i have those files to load (or not) I get the same results. The main navigation buttons (on frame 2+) dont work when I go from frame 1 to any frame other than 2.
If I go from 1 to 2 everything works fine but even if I go from 1 to 2 then back to 1 and go to some frame other than 2 (from 1) the buttons just dont respond at all. Why would I need to go to the first frame of that set (2) for the buttons to work?
-
Oh, I get it now. For some reason, I wasn't getting the "main navigation" part. Here, take this code:
PHP Code:
btn_2d.addEventListener(MouseEvent.MOUSE_UP, btnHandler); btn_3d.addEventListener(MouseEvent.MOUSE_UP, btnHandler); btn_reel.addEventListener(MouseEvent.MOUSE_UP, btnHandler); btn_resume.addEventListener(MouseEvent.MOUSE_UP, btnHandler); btn_about.addEventListener(MouseEvent.MOUSE_UP, btnHandler);
And create new blank keyframes for each frame after 2 in your CODE layer and paste that code into each keyframe. You just have to redefine the listeners... you don't have to redefine the function. I think that should fix it. At least it fixed it for me. I couldn't do extensive testing because I couldn't pull in the external files it was calling, but the main navigation started working.
-
That seems a little reduntant doesn't it? Shouldn't it work somewhat similar to how I have it now though? I shouldn't have to redefine the listeners every frame should I? Or is there just a completely different way to do it maybe?
-
Hmmm... I'm not sure if you have to redefine a listener in each frame, but I've seen it done that way before. In either case, it fixed the problem.... for me anyway.
-
I dont know either. It just seems that I shouldn't have to redefine the listeners for each frame. It seems to me that it breaks the whole object oriented approach of not reusing code over and over. Obviously though I dont know how to get it to work without doing that so I'm stuck with the work around for now.
-
Originally Posted by Jr-
I dont know either. It just seems that I shouldn't have to redefine the listeners for each frame. It seems to me that it breaks the whole object oriented approach of not reusing code over and over. Obviously though I dont know how to get it to work without doing that so I'm stuck with the work around for now.
Actually, though it still may be the wrong way to do it, I think it fits in partly with the Object-Oriented approach. Though you have to reuse the listener code, you're not having to type all those functions over again...
-
Ok well, maybe I worded that incorrectly but it just seems that you should be able to put listeners on one key frame that spans multiple frames and the "listeners" should then listen for an event no matter what frame you're on in that set.
The thing that is odd to me is that it "sort of" works that way but only if I go to the first frame in the set to start. If I go to the second frame or higher in that set and skip that first one, the buttons just dont do anything at all.
By the way, thanks for all the help. I'm sure there is just one little thing that I'm missing.
-
I think I just realized why it does that.
If you're skipping the second frame, it never actually runs that code. That code runs in the second frame whether you span that layer over multiple frames or not. So, if you skip that second frame (i.e. jump straight to the third frame), it's not going to run that code. You need to find a way to run that block of code regardless of what frame they go to. That's why you have to put it in each frame.
Here's what I've tried so far to correct the problem:
1. I just moved the block of code for the listeners into the first frame, but those buttons didn't exist yet (not until the 2nd frame) so it errored out.
2. I completely removed the second frame of actions and just pasted the code I needed in the first frame. Of course, the same problem cropped up because those buttons don't exist until the second frame.
So, if you're going to continue with this style of navigation, and you really want to avoid putting those listeners in each frame, you're going to have to find a way to run that block of code no matter which button is clicked, and it's going to have to be run while the buttons to which it refers are present on the stage.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|