2

我有三個影片剪輯都鏈接到舞臺,我希望他們的行爲像一個按鈕/但我沒有使用一個按鈕,因爲我沒有找到一種方法來讓每個部分,上,下,擊)動畫,而不僅僅是當鼠標與它一起使用時纔會改變。到目前爲止,我已經能夠讓所有三個人出現在我的舞臺上,並展示何時點擊鼠標,以及點擊時的情況,但我認爲我在使用removeChild時會出現問題。每個MC應該一次出現一個,現在當我將鼠標懸停並看起來「閃爍」時,所有三個MC都顯示出來。這裏是我的代碼:ActionScripting問題:添加/刪除兒童

var mainMoon:swayingMoon = new swayingMoon(); 
mainMoon.x = 50; 
mainMoon.y = 10; 
addChild(mainMoon); 

var hoverMoon:glowMoon = new glowMoon(); 
hoverMoon.x = 50; 
hoverMoon.y = 10; 

var movieMoon:clickedMoon = new clickedMoon(); 
movieMoon.x = 50; 
movieMoon.y = 10; 

mainMoon.addEventListener(MouseEvent.ROLL_OVER, showHoverMoon); 
mainMoon.addEventListener(MouseEvent.ROLL_OUT, hideHoverMoon); 
hoverMoon.addEventListener(MouseEvent.CLICK, startMovieMoon) 
function showHoverMoon(event:MouseEvent):void 
{ 
addChild(hoverMoon); 

} 
function hideHoverMoon(event:MouseEvent):void 
{ 
removeChild(hoverMoon) 
} 
function startMovieMoon(event:MouseEvent):void 
{ 
addChild(movieMoon); 
} 

回答

0

我想你應該封裝你的三個月亮的狀態到一個單獨的影片剪輯,將控制所有的月相本身發生變化。如果它已經如此,那很好。具有這種MovieClip-Button類型對象的一般原則是將偵聽器分配給父實例,而不是該按鈕的部分。

public class Moon extends Sprite { 
    private var upState:swayingMoon=new swayingMoon(); 
    private var overState:glowMoon=new glowMoon(); 
    private var downState:clickedMoon=new clickedMoon(); 
    private var areWeClicked:Boolean; 
    private var areWeOver:Boolean; 
    public function Moon() { 
     areWeClicked=false; 
     areWeOver=false; 
     addChild(upState); 
     addEventListener(MouseEvent.ROLL_OVER, showHoverMoon); 
     addEventListener(MouseEvent.ROLL_OUT, hideHoverMoon); 
     addEventListener(MouseEvent.CLICK, showClickedMoon); 
     addEventListener(Event.COMPLETE, hideClickedMoon); 
    } 
    private function showHoverMoon(e:MouseEvent):void { 
     areWeOver=true; 
     if (areWeClicked) return; 
     removeChild(upState); 
     addChild(overState); 
    } 
    private function hideHoverMoon(e:MouseEvent):void { 
     areWeOver=false; 
     if (areWeClicked) return; 
     removeChild(overState); 
     addChild(upState); 
    } 
    private function showClickedMoon(e:MouseEvent):void { 
     if (areWeClicked) { 
      downState.gotoAndPlay(1); 
      return; 
     } 
     if (overState.parent) removeChild(overState); else removeChild(upState); 
     addChild(downState); 
     downState.gotoAndPlay(1); // your clicked moon seems to be a playing MC, so starting it over 
     areWeClicked=true; 
    } 
    private function hideClickedMoon(e:Event):void { 
     if (e.target!=downState) return; // not our event 
     if (!areWeClicked) return; 
     areWeClicked=false; 
     removeChild(downState); 
     if (areWeOver) addChild(overState); else addChild(upState); 
    } 
} 

現在,您的父類正在控制發生什麼以及何時發生。我假設您的clickedMoon MC只會播放一次,然後向其自身發送一個事件Event.COMPLETE,以便其父母將收到通知並將採取行動。

最初,您的事件偵聽器結構阻止了您隱藏mainMoon MC,否則您的其他偵聽器將永遠不會動作,現在您正在使用父對象來偵聽事件,並且可以安全地刪除部分月亮。

0
Just for a custom button you are going too much complex way. one movieClip is enough for create the button. First create a movieClip and inside that movieClip's timeline create two more frame for 'hover' and click effect. here is little bit of code to start. 


var myButton_btn:CustomButton = new CustomButton(); 
addChild(myButton_btn); 
myButton_btn.x = 100; 
myButton_btn.y = 100; 

myButton_btn.addEventListener(MouseEvent.ROLL_OVER, onOver); 
myButton_btn.addEventListener(MouseEvent.ROLL_OUT, onOut); 
myButton_btn.addEventListener(MouseEvent.CLICK, onClick); 

function onOver(event:MouseEvent):void { 
    //trace('over'); 
    event.target.gotoAndStop('hover'); 
} 

function onOut(event:MouseEvent):void { 
    //trace('normal'); 
    event.target.gotoAndStop('normal'); 
} 

function onClick(event:MouseEvent):void { 
    //trace('click'); 
    event.target.gotoAndStop('click'); 

}