Flash AS3 Tweelite和XML问题

时间:2009-10-13 18:41:58

标签: xml flash actionscript-3 cs3

我有两帧Flash CS3动画。在第一帧,我(成功)将四个图像加载到帧上,并使用TweenLite旋转(成功)。当用户点击按钮时,设置变量(resumeVideoOn)以指示用户正在查看的当前图像,并将它们带到播放相应视频的第2帧。当视频完成播放时,用户可以选择单击按钮重放视频,或者单击按钮将其带回到frame1(通过简单的gotoAndPlay(1)调用)。当用户返回到frame1时,我检测到'resumeVideoOn'的值,以确定恢复动画循环的功能。它正确加载初始图像。然而,当它继续运行一系列函数时(我可以判断由于跟踪以及在这些函数中调用的其他补间正常工作的事实),只显示返回的原始图像(其他三个图像是由TweenLite调用不会出现)。我已经在这里讨论了一段时间了。下面是一些代码,虽然有很多,所以我试着只提出必要的东西:

// 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].@IMG));
    image1.addChild(img_loader1);
    wtv1 = my_videos[0].@WTVPOS;
    video1 = my_videos[0].@VIDURL;

    var img_loader2 = new Loader();
    img_loader2.load(new URLRequest(my_videos[1].@IMG));
    image2.addChild(img_loader2);
    wtv2 = my_videos[1].@WTVPOS;
    video2 = my_videos[1].@VIDURL;

    var img_loader3 = new Loader();
    img_loader3.load(new URLRequest(my_videos[2].@IMG));
    image3.addChild(img_loader3);
    video3 = my_videos[2].@VIDURL;
    wtv3 = my_videos[2].@WTVPOS;

    var img_loader4 = new Loader();
    img_loader4.load(new URLRequest(my_videos[3].@IMG));
    image4.addChild(img_loader4);
    wtv4 = my_videos[3].@WTVPOS;
    video4 = my_videos[3].@VIDURL;
}

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>

1 个答案:

答案 0 :(得分:0)

只是想出来,对于任何关心的人...... 我需要添加一个

removeChild(main_container);

到将用户发送到第2帧的功能。当我拖动显示窗口大于视频窗口时,我可以看到原始图像仍然在舞台上,从而阻止用户返回到帧时显示的任何图像1。