2009-10-13 79 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帧时阻止显示任何图像。