简体   繁体   中英

AS3 paralell movie clips + links

I'm a very beginner in as3. I want to make a box with two parallel movie clips loaded on mouse hover and rewinded on mouse out. I'd like to add links to movie clips, but after a long time I've ended up with nothing.

Code looks like this:

import flash.events.MouseEvent;

for (var fl_ChildIndex:int = 0;
fl_ChildIndex < this.numChildren;
fl_ChildIndex++)
{
this.getChildAt(fl_ChildIndex).addEventListener(MouseEvent.MOUSE_OVER, nawierzch);
}

function nawierzch(event:MouseEvent):void
{
this.addChild(event.currentTarget as DisplayObject);
}
zlec.stop();

zlec.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
zlec.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
zlec.addEventListener(MouseEvent.CLICK, onClick);

zlec.buttonMode = true;
zlec.mouseChildren = true;


function onClick(event:MouseEvent):void
{
    trace("click")
var url:String = "http://www.motoopcja.pl";
var request:URLRequest = new URLRequest(url);
try {
       navigateToURL(request, '_blank');
    } catch (e:Error) {
        trace("Error occurred!");
    }

}

function onMouseOver(e:MouseEvent):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

mc.removeEventListener(Event.ENTER_FRAME, rewind);

mc.play();
mc.addEventListener(Event.ENTER_FRAME, advance);
}

function onMouseOut(e:MouseEvent):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

mc.removeEventListener(Event.ENTER_FRAME, advance);

mc.prevFrame();
mc.addEventListener(Event.ENTER_FRAME, rewind);
}

function advance(e:Event):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

if (mc.currentFrame == mc.totalFrames)
{
    mc.stop();
    mc.removeEventListener(Event.ENTER_FRAME, advance);
}
}

function rewind(e:Event):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

if (mc.currentFrame == 1)
{
    mc.stop();
    mc.removeEventListener(Event.ENTER_FRAME, rewind);
}
else
{
    mc.prevFrame();
}
}
wykonaj.stop();

wykonaj.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver2);
wykonaj.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut2);
wykonaj.addEventListener(MouseEvent.CLICK, onClick2);

wykonaj.buttonMode = true;
wykonaj.mouseChildren = true;

function onClick2(e:MouseEvent):void
{
trace("click")  
}

function onMouseOver2(e:MouseEvent):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

mc.removeEventListener(Event.ENTER_FRAME, rewind);

mc.play();
mc.addEventListener(Event.ENTER_FRAME, advance);
}

function onMouseOut2(e:MouseEvent):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

mc.removeEventListener(Event.ENTER_FRAME, advance);

mc.prevFrame();
mc.addEventListener(Event.ENTER_FRAME, rewind);
}

function advance2(e:Event):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

if (mc.currentFrame == mc.totalFrames)
{
    mc.stop();
    mc.removeEventListener(Event.ENTER_FRAME, advance);
}
}

function rewind2(e:Event):void
{
var mc:MovieClip = MovieClip(e.currentTarget);

if (mc.currentFrame == 1)
{
    mc.stop();
    mc.removeEventListener(Event.ENTER_FRAME, rewind);
}
else
{
    mc.prevFrame();
}

}

The problem can be that you don't import everything you need. You must also be carefull not to remove an eventlistener that doesn't exist. That can happen very often in your code. Here is an example:

zlec is rolled over. zlec has the rewind eventlistener removed (doesn't exist).

I don't know if you have some outside AS3 that prevents it, but it can throw an error.

This is a much cleaner solution:

import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.events.Event;//imports

zlec.addEventListener(MouseEvent.ROLL_OVER,turnPar);
zlec.addEventListener(MouseEvent.ROLL_OUT,turnPar);
zlec.addEventListener(MouseEvent.CLICK,clickedBox);
zlec.buttonMode = true;//make the cursor change on roll over

for(var curChild:uint=0;curChild<this.numChildren) {
    this.getChildAt(curChild).addEventListener(Event.ENTER_FRAME,playPar);
}

var theState:String = "MouseEvent.ROLL_OUT";//by default rewind to frame 1
function turnPar(event:MouseEvent):void { theState = event.type; }

function clickedBox(event:MouseEvent):void {
    var url:String = "http://www.motoopcja.pl";//your website
    var req:URLRequest = new URLRequest(url);//as URLRequest
    navigateToURL(req,'_blank');//open in a new window
}

function playPar(event:Event):void {
    if("MouseEvent.ROLL_OUT" == theState && event.currentTarget.currentFrame > 1) { event.currentTarget.prevFrame(); }
    else if("MouseEvent.ROLL_OVER" == theState && event.currentTarget.currentFrame < event.currentTarget.totalFrames) { event.currentTarget.nextFrame(); }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM