Contrôler une animation à la souris
Bonjour,
Mon problème est d'arriver à faire une animation en flash qui ressemble à ceci :
http://www.flashloaded.com/flashcomp.../example3.html
Je souhaite uniquement garder l'animation où l'objet tourne.
Jusqu'à maintenant je faisais ça sous flash professionnal mais ma version d'essaie est terminée et je préfère faire un programme car j'en ai plus de 60 à générer.
Ce que j'ai pensé à faire :
1) Utiliser un fichier XML où je mets les images à loader
2) Créer un moovie clip contenant autant de frames que d'images
3) Permettre le Control à la souris
J'arrive à loader les images à base du fichier XML mais je ne sais pas comment créer un Movie clip avec autant de frame.
Après j'ai un code permettant de gérer un moovie clip.
Est ce que vous avez des idées pour m'aider à poursuivre ce code ?
Merci d'avance,
Victor
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| package
{
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.Stage;
import flash.display.DisplayObject;
import flash.display.Sprite;
/**
* ...
* @author Victor Sabatier
*/
public class CreateAnim
{
/* attributs de la classe */
private var frameTo:Number; // numéro de la frame courante affichée
private var oldFrameNumber:Number; //la position dans le clip au moment du premier click
private var oldMouseXDown:Number; //la position de la souris quand elle clique
private var isMouseDown:Boolean;
private var clip360:MovieClip; // movieClip principal
private var nameSWF:String; // nom du swf loadé
private var mLoader:Loader;
private var mRequest:URLRequest;
private var monTableau:Array = ["file:///C:/Users/kujjuk/Desktop/pack-ouvert-320x320.jpg","file:///C:/Users/kujjuk/Desktop/imgres.jpg"];
/* constructeur de la classe */
public function CreateAnim(stage:Object,_frameTo:Number,_oldFrameNumber:Number,
_oldMouseXDown:Number,_isMouseDown:Boolean)
{
frameTo=_frameTo;
oldFrameNumber=_oldFrameNumber;
oldMouseXDown=_oldMouseXDown;
isMouseDown=_isMouseDown;
clip360 = new MovieClip();
stage.addChild(clip360);
}
public function startLoad(i:Number):void
{
mLoader = new Loader();
clip360.addChild(mLoader);
mRequest = new URLRequest(monTableau[i]);
mLoader.load(mRequest);
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, controlCLip);
}
public function controlCLip(event:Event):void
{
//trace("test")
clip360.addFrameScript(clip360.totalFrames - 1, stopFunc);
clip360.buttonMode = true;
trace(clip360.totalFrames);
clip360.useHandCursor = true;
clip360.addEventListener(Event.ENTER_FRAME, goTo);
clip360.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDOWN);
clip360.addEventListener(MouseEvent.MOUSE_UP, onMouseUP);
}
//methode appelée dès que la souris est sur la fenêtre
private function goTo(e:Event):void
{
//check if the mouse is still inside the frame
if(!(clip360.mouseX < clip360.stage.stageWidth && clip360.mouseX > 0 && clip360.mouseY < clip360.stage.stageHeight && clip360.mouseY > 0)){
isMouseDown = false;
}
if(isMouseDown){
var percentageMoved:Number = (clip360.mouseX-oldMouseXDown)/clip360.stage.stageWidth;
frameTo = oldFrameNumber + (int)( -3 * percentageMoved * clip360.totalFrames);
trace(frameTo)
//check if frameTo is still in the bounds. Otherwise, start over to have a continous rolling effect :)
while(frameTo < 1){
frameTo = clip360.totalFrames + frameTo;
}
while(frameTo > clip360.totalFrames){
frameTo = frameTo - clip360.totalFrames;
}
clip360.gotoAndStop(frameTo);
}
}
private function onMouseDOWN(e:Event):void
{
trace("mouseDOWN");
oldMouseXDown = clip360.mouseX; //on la sauvegarde pour savoir de combien elle a bougé, ainsi calculer la nouvelle frame affichée
oldFrameNumber = clip360.currentFrame;
clip360.stop(); //when window appears, we do a first loop. If the user clicks before the end of the loop, we stop the loop
isMouseDown=true;
}
private function onMouseUP(e:Event):void
{
trace("mouseUP");
isMouseDown=false;
}
private function stopFunc():void{
clip360.gotoAndStop(1);
}
}
} |