ActionScript 3.0 and rollovers.
March 4, 2009 12:16 PM Subscribe
ActionScript 3.0 trouble: rollover effects.
Alright, so here's what I'm trying to do in Flash CS3. I want a button to get darker when I roll over it, and lighten back up when I roll out. It's linked to a movie clip with a simple tween to change the color, and I have ActionScript (3.0) doing this. (HTML link; my code got messed up during preview.)
This works except for the fact that it doesn't fade between colors; it simply jumps between them, and I can't figure out why. I've tried Googling, but that's proved fruitless.
If you can find a way to fix my current code rather than replace it, that would be much preferred (i.e. no alpha effects, please).
Feel free to email/MeMail me with questions, for the .fla, etc. Thanks so much.
Running OS X 10.5, Flash CS3.
Alright, so here's what I'm trying to do in Flash CS3. I want a button to get darker when I roll over it, and lighten back up when I roll out. It's linked to a movie clip with a simple tween to change the color, and I have ActionScript (3.0) doing this. (HTML link; my code got messed up during preview.)
This works except for the fact that it doesn't fade between colors; it simply jumps between them, and I can't figure out why. I've tried Googling, but that's proved fruitless.
If you can find a way to fix my current code rather than replace it, that would be much preferred (i.e. no alpha effects, please).
Feel free to email/MeMail me with questions, for the .fla, etc. Thanks so much.
Running OS X 10.5, Flash CS3.
Response by poster: I'm sorry, could you be a lot more specific? I haven't used Flash in years.
posted by reductiondesign at 12:47 PM on March 4, 2009
posted by reductiondesign at 12:47 PM on March 4, 2009
Best answer: Essentially, something to this end... my syntax may be buggy - I just threw this together, but you can see where I'm going with it:
private var _dir:Number = 0;
onMouseOver.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler, false, 0, true);
onMouseDown.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true);
private function activateEnterFrame():void {
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
}
private function portfolioResponsePlay(e:MouseEvent):void {
if(portfolioAnimation.currentFrame <> _dir = 1;
activateEnterFrame();
}
}
private function portfolioResponseRev(e:MouseEvent):void {
if(portfolioAnimation.currentFrame > 1) {
_dir = -1;
activateEnterFrame();
}
}
private function enterFrameHandler(e:Event):void {
if (_dir != 0) {
portfolioAnimation.gotoAndStop(portfolioAnimation.currentFrame + _dir);
} else {
this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler, false);
}
}>
posted by kaseijin at 12:53 PM on March 4, 2009
private var _dir:Number = 0;
onMouseOver.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler, false, 0, true);
onMouseDown.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true);
private function activateEnterFrame():void {
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
}
private function portfolioResponsePlay(e:MouseEvent):void {
if(portfolioAnimation.currentFrame <> _dir = 1;
activateEnterFrame();
}
}
private function portfolioResponseRev(e:MouseEvent):void {
if(portfolioAnimation.currentFrame > 1) {
_dir = -1;
activateEnterFrame();
}
}
private function enterFrameHandler(e:Event):void {
if (_dir != 0) {
portfolioAnimation.gotoAndStop(portfolioAnimation.currentFrame + _dir);
} else {
this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler, false);
}
}>
posted by kaseijin at 12:53 PM on March 4, 2009
Feh, that bugged out on html render. lemme try this:
posted by kaseijin at 12:55 PM on March 4, 2009
private var _dir:Number = 0; onMouseOver.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler, false, 0, true); onMouseDown.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); private function activateEnterFrame():void { this.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true); } private function portfolioResponsePlay(e:MouseEvent):void { if(portfolioAnimation.currentFrame <> _dir = 1; activateEnterFrame(); } } private function portfolioResponseRev(e:MouseEvent):void { if(portfolioAnimation.currentFrame > 1) { _dir = -1; activateEnterFrame(); } } private function enterFrameHandler(e:Event):void { if (_dir != 0) { portfolioAnimation.gotoAndStop(portfolioAnimation.currentFrame + _dir); } else { this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler, false); } } >
posted by kaseijin at 12:55 PM on March 4, 2009
Hmm, that did it too... mods, please delete above!
posted by kaseijin at 12:57 PM on March 4, 2009
private var _dir:Number = 0; onMouseOver.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler, false, 0, true); onMouseDown.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); private function activateEnterFrame():void { this.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true); } private function portfolioResponsePlay(e:MouseEvent):void { if(portfolioAnimation.currentFrame <> _dir = 1; activateEnterFrame(); } } private function portfolioResponseRev(e:MouseEvent):void { if(portfolioAnimation.currentFrame > 1) { _dir = -1; activateEnterFrame(); } } private function enterFrameHandler(e:Event):void { if (_dir != 0) { portfolioAnimation.gotoAndStop(portfolioAnimation.currentFrame + _dir); } else { this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler, false); } } >
posted by kaseijin at 12:57 PM on March 4, 2009
Feh, I dunno why MeFi is rendering "<>" but oh well... you get the jist.>
posted by kaseijin at 12:58 PM on March 4, 2009
posted by kaseijin at 12:58 PM on March 4, 2009
Basically if you're trying to step forward or back frames via a while loop, Flash is going to do it at the speed with which your machine parses the code (which is why you're seeing an abrupt jump). For animation, you need to tie that stepping to the timeline using an enter frame event.
posted by kaseijin at 1:00 PM on March 4, 2009
posted by kaseijin at 1:00 PM on March 4, 2009
Oh, and that last conditional there should check to see if the current frame is 0, not the _dir variable. =P
posted by kaseijin at 1:01 PM on March 4, 2009
posted by kaseijin at 1:01 PM on March 4, 2009
Response by poster: I copy/pasted that code in Flash and cleaned it up as best I could:
"The private attribute may be used only on class property definitions."
Eh? By the way, thanks so much for helping; this is above and beyond what I expected.
posted by reductiondesign at 1:08 PM on March 4, 2009
"The private attribute may be used only on class property definitions."
Eh? By the way, thanks so much for helping; this is above and beyond what I expected.
posted by reductiondesign at 1:08 PM on March 4, 2009
Ah yeah, I set that up to go inside a class. If you're sticking the code on the timeline, then just kill the "private" declarations.
posted by kaseijin at 1:11 PM on March 4, 2009
posted by kaseijin at 1:11 PM on March 4, 2009
Ha, I just noticed that I didn't name the handlers consistently, either. I always name them something like mouseDownHandler, so that upper part was basically autopilot. anyway - if you need any more help shoot me a mefi mail
posted by kaseijin at 1:22 PM on March 4, 2009
posted by kaseijin at 1:22 PM on March 4, 2009
This thread is closed to new comments.
posted by kaseijin at 12:41 PM on March 4, 2009