mc内的按钮影响代码

时间:2009-10-29 00:22:40

标签: actionscript-3

我有一个带有两个按钮的movieClip。

问题是当鼠标悬停在这两个按钮上时,管理movieClip的代码停止工作,好像鼠标不在MC上(按钮是MC的子代,不管它不管怎么办? )。

请您分享一些建议吗? 感谢

/*mc follows mouse. I can't click btns because when mouse rollover  btns the mc moves*/
function showImgOptions (e:Event):void{
    if (mc.hitTestPoint(mouseX,mouseY,false)){
        mc.y = mc.y;
        mc.x = mc.x;
    }else{
        var delayX:int = mc.x - mouseX;
        var delayY:int = mc.y - mouseY;
        mc.x -= delayX / 6;
        mc.y -= delayY/6;
    }
}
mc.btn1.addEventListener (MouseEvent.CLICK, closeClick);
mc.btn2.addEventListener (MouseEvent.CLICK, zoomClick);
function closeClick (e:MouseEvent):void{}
function zoomClick (e:MouseEvent):void{}
stage.addEventListener (Event.ENTER_FRAME, showImgOptions);
addChild (mc);

将代码更改为:

var mc:menuMC = new menuMC();

addChild(mc);

var p:Point = mc.localToGlobal(new Point(mc.mouseX,mc.mouseY));

/*mc follows mouse. I can't click btns because when mouse rollover  btns the mc moves*/
function showImgOptions (e:Event):void
{

    if (! mc.hitTestPoint(p.x,p.y,false))
    {
        mc.y = mc.y;
        mc.x = mc.x;
    }else{
        //move mc towards mc.parent's mouseX and mouseY
        var delayX:int = mc.x - mouseX;
        var delayY:int = mc.y - mouseY;
        mc.x -= delayX / 6;
        mc.y-=delayY/6;
    }
}

mc.btn1.addEventListener (MouseEvent.CLICK, closeClick);
mc.btn2.addEventListener (MouseEvent.CLICK, zoomClick);
function closeClick (e:MouseEvent):void
{
}
function zoomClick (e:MouseEvent):void
{
}
stage.addEventListener (Event.ENTER_FRAME, showImgOptions);

现在我收到了这个错误:

TypeError: Error #1010: A term is undefined and has no properties.

Here您可以下载FLA。测试它并尝试单击鼠标内的MC内的按钮1和2

2 个答案:

答案 0 :(得分:0)

hitTestPoint期望阶段坐标:

  

x和y参数指定舞台坐标空间中的一个点,而不是包含显示对象的显示对象容器(除非该显示对象容器是舞台)。

使用localToGlobal获取舞台坐标:

var p:Point = mc.localToGlobal(new Point(mc.mouseX, mc.mouseY));
if(!mc.hitTestPoint(p.x, p.y,false))
{
  //move mc towards mc.parent's mouseX and mouseY
}

答案 1 :(得分:0)

解决了!!

更改了代码。我不知道这对任何人都有帮助,但我希望如此。谢谢大家。

stage.addEventListener(Event.ENTER_FRAME, moveMC);

var mc:menuMC = new menuMC();

addChild(mc);

function moveMC(e:Event):void {
 if (mc.hitTestObject(big_mc)) {
  mc.visible = true;
 } else {
  mc.visible = false;
 }
 if (mc.hitTestPoint(mouseX,mouseY,false)) {
  mc.y = mc.y;
  mc.x = mc.x;
 } else {
  var delayX:int = mc.x - mouseX;
  var delayY:int = mc.y - mouseY;
  mc.x -= delayX / 6;
  mc.y-=delayY/6;
 }
}


mc.btn1.addEventListener(MouseEvent.CLICK, onBtn1);
mc.btn2.addEventListener(MouseEvent.CLICK, onBtn2);


function onBtn1(e:MouseEvent):void {
 trace("do something");
}
function onBtn2(e:MouseEvent):void {
 trace("do something else");
}