2009-10-13 115 views
0

我有一個兩幀的Flash CS3動畫。在第一幀,我(成功)將四個圖像加載到框架上,並使用TweenLite旋轉它們(成功)。當用戶點擊一個按鈕時,會設置一個變量(resumeVideoOn)來指示用戶正在查看的當前圖像,然後將它們送到播放相應視頻的frame2。當視頻完成播放時,用戶可以選擇單擊按鈕重播視頻,或者選擇一個按鈕將它們帶回frame1(通過簡單的gotoAndPlay(1)調用)。當用戶返回到frame1時,我檢測到'resumeVideoOn'的值以確定哪個函數恢復動畫循環。它正確加載最初的圖像。然而,雖然它繼續貫穿一系列功能(我可以告訴由於痕跡和其他補間在這些功能中被調用的事實正常工作),但只有您返回的原始圖像正在顯示(其他三個圖像是由TweenLite調用不會出現)。現在我已經在這個圈子裏一段時間了。下面是一些代碼,雖然有很多,所以我試圖只把必要的東西:Flash AS3 Tweelite和XML問題

// pull in images and video properties thru XML 
var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("flash.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
    var myXML:XML = new XML(e.target.data); 
    my_videos = myXML.VIDEO; 
    my_total = my_videos.length(); 
    if(my_total > 0) { 
     makeContainers(); 
     callImgs(); 
    } else { 
     trace("put alternate case here in case nothing is loaded");   
    } 
} 

function makeContainers():void { 
    main_container = new Sprite(); 
    addChild(main_container); 

    main_container.addChild(image1); 
    main_container.addChild(image2); 
    main_container.addChild(image3); 
    main_container.addChild(image4); 

    setChildIndex(DisplayObjectContainer(main_container),0); 
} 

function callImgs():void { 
    var img_loader1 = new Loader(); 
    img_loader1.load(new URLRequest(my_videos[0][email protected])); 
    image1.addChild(img_loader1); 
    wtv1 = my_videos[0][email protected]; 
    video1 = my_videos[0][email protected]; 

    var img_loader2 = new Loader(); 
    img_loader2.load(new URLRequest(my_videos[1][email protected])); 
    image2.addChild(img_loader2); 
    wtv2 = my_videos[1][email protected]; 
    video2 = my_videos[1][email protected]; 

    var img_loader3 = new Loader(); 
    img_loader3.load(new URLRequest(my_videos[2][email protected])); 
    image3.addChild(img_loader3); 
    video3 = my_videos[2][email protected]; 
    wtv3 = my_videos[2][email protected]; 

    var img_loader4 = new Loader(); 
    img_loader4.load(new URLRequest(my_videos[3][email protected])); 
    image4.addChild(img_loader4); 
    wtv4 = my_videos[3][email protected]; 
    video4 = my_videos[3][email protected]; 
} 

function imgLoaded(e:Event):void { 
    var my_img:Loader = Loader(e.target.loader); 
    image1.addChild(my_img); 
} 


//tween and go to video on frame 2 if clicked on myFrame1() 
function myFrame1():void { 
    //image 1 
    image1.alpha = 100;// start faded down 

    TweenLite.to(selectedFrame, 1, {x:501.6, overwrite:1}); 
    TweenLite.to(image1, 1, {alpha:0, delay:3, overwrite:0}); 
    TweenLite.to(image2, 1, {alpha:1, delay:3, overwrite:0}); 
    //wtv1 
    if(wtv1 == "right") { 
     TweenLite.to(watchthevideo_right_mc, 1, {alpha:1}); 
     watchthevideo_right_mc.addEventListener(MouseEvent.CLICK, playVideo1); 
     TweenLite.to(watchthevideo_right_mc, 1, {alpha:0, delay:3, overwrite:0, onComplete:myFrame2}); 
    } else { 
     TweenLite.to(watchthevideo_left_mc, 1, {alpha:1}); 
     watchthevideo_left_mc.addEventListener(MouseEvent.CLICK, playVideo1); 
     TweenLite.to(watchthevideo_left_mc, 1, {alpha:0, delay:3, overwrite:0, onComplete:myFrame2}); 
    } 
} 

function playVideo1(e:MouseEvent):void { 
    //kill all tweens 
    TweenLite.killTweensOf(watchthevideo_right_mc); 
    TweenLite.killTweensOf(watchthevideo_left_mc); 
    TweenLite.killTweensOf(image1); 
    TweenLite.killTweensOf(image2); 
    TweenLite.killTweensOf(image3); 
    TweenLite.killTweensOf(image4); 
    videoFile = video1; 
    resumeVideoOn = 1; 
    gotoAndPlay(2); 
} 

// on frame 2 
// after video is played 
function returnShow(e:MouseEvent):void { 
    TweenLite.to(_replayButton, 1, {alpha:0, overwrite:0}); 
    TweenLite.to(_returnButton, 1, {alpha:0, overwrite:0}); 
    _replayButton.visible = false; 
    _returnButton.visible = false; 
    TweenLite.to(rectangle, 1, {alpha:0, overwrite:0}); 

    //reset all video data 
    removeChild(video); 
    removeChild(pause_mc); 
    removeChild(play_mc); 
    removeChild(volslide_mc); 
    removeChild(controls_mc); 
    removeChild(controlBacker_mc); 
    removeChild(_replayButton); 
    removeChild(_returnButton); 

    gotoAndPlay(1); 
} 

// when the user returns to frame 1, the variable 'resumeVideoOn' is checked 
// in an if statement to determine where to resume. the if statement is run, 
// then goes to function myFrame2 (or whatever the next frame is), but the image 
// is not changing 

還,我的XML文件看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<MYLIST> 
<VIDEO VIDURL="videos/video1.flv" WTVPOS="right" IMG="imgs/image1.jpg" /> 
<VIDEO VIDURL="videos/video2.flv" WTVPOS="left" IMG="imgs/image2.jpg" /> 
<VIDEO VIDURL="videos/video3.flv" WTVPOS="right" IMG="imgs/image3.jpg" /> 
<VIDEO VIDURL="videos/video4.flv" WTVPOS="left" IMG="imgs/image4.jpg" /> 
</PHHLIST> 

回答

0

就想通了,對於任何人關心... 我需要一個

removeChild(main_container); 

添加到函數發送用戶到框架2。當我拖比視頻窗口較大的顯示窗口中,我可以看到第e原始圖像仍然在舞臺上,因此在用戶返回到第1幀時阻止顯示任何圖像。