Bonjour à tous,
Le but final de mon programme est de déplacer des clips (start & stop drag ok) et de les positionner au bon endroit afin de reconstituer une image. Je cherche à vérifier le position des images avec leur position finale pour appliquer un effet "collé magnétique" si la pièce en est proche.
Mon blocage se situe à ce niveau : je dois récupérer (après avoir indiqué les valeurs finale dans un tableau)les valeurs finales, faire en sorte qu'elles se situent ou qu'elles se recalculent en fonction des coordonnées maximales que j'impose à ma scène, puis que je vérifie la position actuelle de mon clip relâché avec sa position finale que j'ai défini dans un tableau et appliquer l'effet "collé magnétique" à ma pièce si elle est proche de sa version finale...
J'ai essayé beaucoup de solutions mais je ne sais plus quelle piste emprunter, je suis coincée... Pouvez-vous m'aider???
Une partie de mon code :
var nbPieceOk:Number=0;
var ecartBordGaucheX:Number=10;//écart d bord gch de chq piece
var ecartBordGaucheY:Number=140;//écrat en hauteur de chq piece
var placeX:Number;
var placeY:Number;
var posX:uint=140, posY:uint=115;
var TableaulistePiecesEnX:Array=new Array();
var TableaulistePiecesEnY:Array=new Array();
var puzzlePiecesTableau:Array=new Array();
var puzzlePiecesTrouve:Array=new Array();
for (var i:Number = 0; i < nbPiecesPuzzles; i++) {
//création d'un clip vide conteneur et création d'1 movieClip pour chaque piece et placer chacun d'eux
var conteneurPiecesPuzzle:Loader=new Loader();
var clipConteneurPiece:Sprite = new Sprite();
//coordonnées finales de chq piece de puzzle
clipConteneurPiece.x=ecartBordGaucheX+(posX*i);
clipConteneurPiece.y=ecartBordGaucheY+(posY*i); //avec posX=140 et pos Y=115
trace("position finale clipConteneurPiece.x="+clipConteneurPiece.x);
trace("position finale clipConteneurPiece.y="+clipConteneurPiece.y);
var positionFinalePieceX:Number=clipConteneurPiece.x;
var positionFinalePieceY:Number=clipConteneurPiece.y;
trace("positionFinalePieceX="+positionFinalePieceX);
trace("positionFinalePieceY="+positionFinalePieceY);
//placement piece dans tableau qui contient coordonnées de toutes les pieces
TableaulistePiecesEnX.push(clipConteneurPiece.x);
TableaulistePiecesEnY.push(clipConteneurPiece.y);
trace("TableaulistePiecesEnX="+TableaulistePiecesEnX);
trace("TableaulistePiecesEnY="+TableaulistePiecesEnY);
//placement aléatoire des pieces sur la scène
clipConteneurPiece.x=Math.floor(Math.random()*(700-10));
clipConteneurPiece.y=Math.floor(Math.random()*(460-10));
adressePiecesPuzzle.url=dossierImage+nomPuzzleChoisi.piece[i];
//chargement du loader et des pieces
conteneurPiecesPuzzle.load(adressePiecesPuzzle);
trace ("pieces"+nomPuzzleChoisi.piece[i]);
//trace ("2dernier chiffre = "+nomPuzzleChoisi.piece[i].substr(27,2));
clipConteneurPiece.name="piece n°"+i; //clipConteneurPiece.name=String(i);
trace("clipConteneurPiece.name = "+clipConteneurPiece.name);
//ajout sur la scene
addChild(clipConteneurPiece);
clipConteneurPiece.addChild(conteneurPiecesPuzzle);
var numeroPiecePuzzle:Number=i;
trace ("numeroPiecePuzzle="+numeroPiecePuzzle);
//placement de chaque piece dans un tableau puis dans un autre avec leur nom pour vérifiaction comptabilisation
puzzlePiecesTableau.push(clipConteneurPiece);
puzzlePiecesTrouve.push(numeroPiecePuzzle);
clipConteneurPiece.addEventListener(MouseEvent.MOUSE_DOWN,deplacementPiece);
clipConteneurPiece.addEventListener(MouseEvent.MOUSE_UP,stopDeplacementPiece);
}
function deplacementPiece(evt:MouseEvent){
evt.currentTarget.startDrag(false, new Rectangle(0,0, stage.stageWidth, stage.stageHeight));//zoneLimite
trace ("piece cliquée "+evt.currentTarget.name);
}
function stopDeplacementPiece (evt:MouseEvent){
//arret deplacement piece
stopDrag();
var coordXDepose:Number = evt.currentTarget.x; //evt.currentTarget
var coordYDepose:Number = evt.currentTarget.y; //evt.currentTarget
trace("coordXDepose="+coordXDepose);
trace("coordYDepose="+coordYDepose);
ecartBordGaucheX+=140;
if (ecartBordGaucheX>700){
ecartBordGaucheX=10;
ecartBordGaucheY+=115;
}
var decalHoriz:Number = Math.abs(ecartBordGaucheX-coordXDepose); //lorsque les pièces s'approchent de leur emplacement prévus
var decalVertic:Number = Math.abs(ecartBordGaucheY-coordYDepose);//décalage et mise place "magnétique"
if (decalHoriz<25 && decalVertic<55) {
stage.removeEventListener(MouseEvent.MOUSE_UP,stopDeplacementPiece);
evt.currentTarget.x = ecartBordGaucheX;
evt.currentTarget.y = ecartBordGaucheY;
nbPieceOk--;
trace("nbPieceOk ="+nbPieceOk);
}
}