2009-10-13 10 views
0

J'ai une animation Flash CS3 à deux images. Sur la première image, je charge (avec succès) quatre images sur le cadre, et je les fais tourner (avec succès) en utilisant TweenLite. Lorsque l'utilisateur clique sur un bouton, une variable (resumeVideoOn) est définie pour indiquer l'image actuelle que l'utilisateur regardait, et ils sont pris à frame2 qui lit une vidéo correspondante. Lorsque la lecture de la vidéo est terminée, l'utilisateur a la possibilité de cliquer sur un bouton pour rejouer la vidéo ou sur un bouton pour la renvoyer à frame1 (via un simple appel à gotoAndPlay (1)). Lorsque l'utilisateur retourne à frame1, je détecte la valeur de 'resumeVideoOn' pour déterminer quelle fonction doit reprendre la boucle d'animation. Il charge correctement l'image initiale. Cependant, alors qu'il continue à parcourir la série de fonctions (je peux dire à cause des traces et du fait que d'autres interpolations fonctionnent correctement), seule l'image originale à laquelle vous revenez s'affiche (les trois autres images étant appelé par TweenLite n'apparaît pas). Je suis allé dans les cercles sur ceci pendant un moment maintenant. Ci-dessous est une partie du code, bien qu'il y ait beaucoup, donc j'ai essayé de ne mettre les choses nécessaires:Flash AS3 Tweelite et XML Edition

// 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 

aussi, mon fichier xml ressemble à ceci:

<?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> 

Répondre

0

Juste figured it out , pour toute personne qui se soucie ... je besoin d'ajouter un

removeChild(main_container); 

à la fonction d'envoi à l'utilisateur de l'image 2. Quand je traînais la fenêtre d'affichage plus grande que la fenêtre vidéo, je pouvais voir e L'image originale était toujours sur la scène, bloquant ainsi toute image affichée lorsque l'utilisateur retournait à l'image 1.