2009-10-29 51 views
0

我有一個movieclip裏面有兩個按鈕。mc裏面的按鈕影響代碼

問題是,當鼠標懸停在這兩個按鈕上時,管理影片剪輯的代碼停止工作,就好像鼠標不在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。測試並嘗試按一下按鈕1和2,MC裏面的鼠標

+0

你可以發佈代碼嗎? – Allan 2009-10-29 01:28:53

+0

當鼠標不在mc上時,你是否試圖讓mc跟隨鼠標,並在鼠標懸停在mc上時保持其靜止? – Amarghosh 2009-10-29 14:00:18

+0

是的,這就是我想要做的 – cayohueso 2009-10-29 17:01:02

回答

0

hitTestPoint以下預期階段座標:

The x and y parameters specify a point in the coordinate space of the Stage, not the display object container that contains the display object (unless that display object container is the Stage).

使用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 
} 
+0

/* mc遵循鼠標。因爲當鼠標滾動btns的MC動作*/ 功能showImgOptions(:事件E):我無法點擊btns空隙{ \t如果(mc.hitTestPoint(mouseX,mouseY的,假)){ \t \t mc.y = mc.y; \t \t mc.x = mc.x; \t} else { \t \t var delayX:int = mc.x - mouseX; \t \t var delayY:int = mc.y - mouseY; \t \t mc.x - = delayX/6; \t \t mc.y - = delayY/6; \t} } mc.btn1.addEventListener(MouseEvent.CLICK,closeClick); mc.btn2.addEventListener(MouseEvent.CLICK,zoomClick); (e:MouseEvent):void {} function zoomClick(e:MouseEvent):void {} stage.addEventListener(Event.ENTER_FRAME,showImgOptions); addChild(mc); – cayohueso 2009-10-29 13:25:14

+0

對不起,我不知道如何添加與Flash中相同格式的代碼 – cayohueso 2009-10-29 13:38:51

+0

單擊問題下面的'edit'鏈接(在'actionscript-3'標籤下面),並將代碼添加到帖子。現在選擇代碼並按下Ctrl-K來格式化代碼。向下滾動並保存編輯。 – Amarghosh 2009-10-29 13:43:31

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