As3 - rotation d'un cercle autour de son centre

gogomonster Messages postés 2 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 22 décembre 2008 - 22 déc. 2008 à 10:09
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 23 déc. 2008 à 10:32
Bonjour!
Après quelques heures à chercher une solution, je me tourne vers vous en espérant trouver une réponse à mes 2 questions:

- la première étant que j'aimerais faire tourner mon cercle autour de son centre avec matrixTransformer mais je n'arrive pas à paramétrer le bout de code que j'ai récupéré
Voici le début de mon code:

//
import flash.display.*;
import flash.geom.Matrix;
import flash.geom.*;
import fl.motion.MatrixTransformer;

var cercle: Shape = new Shape ();
var degrade:Matrix = new Matrix();

degrade.createGradientBox(60,1);
cercle.graphics.beginGradientFill(GradientType.LINEAR,[0xEEEEEE, 0x4D4D4D], [1, 1], [0, 255], degrade);
cercle.graphics.drawCircle(30,30,30);
cercle.x=cercle.y=0;
addChild(cercle);

// jusqu'ici tout va bien!
// maintenant la suite:
function rotate(e:Event){
         cercle.rotation += 1;

          replaceWithAnchor(anchor);                                                                            // repositionne le clip pour que l´ancre reste au meme point

        function createAnchor(target:DisplayObject, x:Number, y:Number) {                  // crée et prépare une ancre pour gérer la rotation du clip

          
                 var anchor:Object = new Object();
                 anchor["target"] = target;
                 anchor["x"] = x;
                    anchor["y"] = y;
                    anchor["angle"] = Math.atan2(target.y - y, target.x - x) - Math.PI*target.rotation/180;
                    anchor["distance"] = Math.sqrt(Math.pow(target.x - x, 2) + Math.pow(target.y - y, 2));
                    return (anchor);
 }

cercle.addEventListener(Event.ENTER_FRAME,rotate);
var anchor:Object = createAnchor(cercle, 15, 15);
// replace le clip après une rotation
 function replaceWithAnchor(anchor:Object) {
     var localx = anchor["distance"] * Math.cos(anchor["angle"] + Math.PI*anchor["target"]["rotation"]/180);
    var localy = anchor["distance"] * Math.sin(anchor["angle"] + Math.PI*anchor["target"]["rotation"]/180);
     anchor["target"]["x"] = anchor["x"] + localx;
     anchor["target"]["y"] = anchor["y"] + localy;
 }  }
// étant débutante en as3, et pas très douée en trigo, je suis un peu perdue là....avec ce code, si quelqu'un a une solution plus simple je veux bien !!!

-2ème question: je voulais appliquer un dégradé au contour de mon cercle et non à mon cercle entier, afin que le centre de ce cercle soit transparent, je me doute que ça doit être faisable mais j'ai essayé avec lineGradientStyle sans succès....

Merci à vous !!!

  GoGoMonster Powers

2 réponses

gogomonster Messages postés 2 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 22 décembre 2008
22 déc. 2008 à 10:12
oups pardon j'ai collé un bout de code qui n'a rien à voir avec matrixTransformer, qui est une autre solution que j'ai essayé sans succès non plus (ce qui est certainement dû à mon manque d'expérience ;))
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
23 déc. 2008 à 10:32
Bonjour,

Pourquoi ne crées-tu pas ton cercle en 0,0 tout simplement plutôt que de le créer à 30,30 ?
Ca t'éviterai de faire tout ce mic-mac pour rien et te permettrais de le bouger simplement en son centre sans rien modifier ...

Peg'
0
Rejoignez-nous