1

私はas3の初心者です。マウス ホバーでロードされ、マウス アウトで巻き戻される 2 つの並列ムービー クリップを含むボックスを作成したいと考えています。ムービー クリップへのリンクを追加したいのですが、長い間何もできませんでした。

コードは次のようになります。

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();
}

}
4

1 に答える 1

0

問題は、必要なものをすべてインポートしていないことです。また、存在しないイベントリスナーを削除しないように注意する必要があります。これは、コード内で非常に頻繁に発生する可能性があります。次に例を示します。

zlec がロールオーバーされます。zlec には rewind イベントリスナーが削除されています (存在しません)。

AS3 の外部にそれを防止するものがあるかどうかはわかりませんが、エラーがスローされる可能性があります。

これはよりクリーンなソリューションです。

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(); }
}
于 2012-12-01T11:31:12.817 に答える