Orientation d'un clip vers la sourris as3

aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011 - 23 oct. 2011 à 16:49
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 26 oct. 2011 à 15:20
Bonjour à tous, je demande de l'aide pour un problème auquel, suite à de longues recherches, je ne trouve pas de réponses. Comment orienter un clip vers la position de la souris, et de préférence en utilisant un code comme celui-ci :

http://www.flashkod.com/telecharger.aspx?ID=22996

Le principe de ce code est qu'il est déposé dans le clip voulu, et qu'il n'est pas dans la scène principale. Ainsi, une fois le code réalisé, on a plus qu'à copier le clip et toutes les copies ont le même effet. Ce code (ci-dessus le fichier zip, et en dessous code lui-même) est géniale, mais il est en as2 et j'utilise l'as3. Connaitriez vous l'équivalent d'un code comme celui-ci en as3 ?

this.onEnterFrame = function() {
x = _root._xmouse-this._x;
y = _root._ymouse-this._y;
this._rotation Math.atan2(y, x)*57; // car 180/Math.PI environ 57
};

Merci

13 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
23 oct. 2011 à 17:36
Bonjour,

Il faut savoir qu'en AS3 on ne peut plus mettre de code sur les éléments de scène.. et c'est trés bien comme ça.
Ensuite, je te donne 2 éléments d'information utiles, sachant que le calcul est exactement le même qu'en AS2 (sauf x et y qu'il faudra changer) :

- Il faut utiliser un evennement de type MouseEvent.MOUSE_MOVE à la place d'un Event.ENTER_FRAME pour une question de CPU.
- les propriétés as3 n'ont plus aucun "_" (d'où la remarque précédente)

Penses-tu arriver à t'en tirer avec ça ?

Peg'
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
24 oct. 2011 à 16:46
J'ai déjà incorporé le mouseX/mouseY via le MouseEvent.MOUSE_MOVE pour faire se déplacer un clip vers la position de la souris. Mon vrai problème est de transposer ça à la rotation. Comme tu l'aura sans doute compris, c'est pour faire un jeu flash (de plateforme). Le tir qui va du personnage à l'endroit pointé par la souris, ça va. Mais l'orientation du canon vers la souris demande à ce que j'ai compris des calculs de trigonométrie qui demande des formules as3 que je ne connais pas.
Cependant j'ai trouvé peut-être un bout de solution.
Utiliser la tweenmax bezier avec orienttobezier=true, dans un laps de temps court, dont la direction est un mouseX mouseY. Ca fait l'orientation du canon, mais je n'arrive pas à lui dire de ne pas se déplacer jusqu'à la souris.
Dans le cas du tir :

TweenMax.to(axedetir, 0.5, {bezierThrough:[{x:mouseX+unevariablex, y:mouseY+unevariabley}], orientToBezier:true, onComplete:retourcanon});

unevariablex et unevariabley seraient l'écart entre le personnage et la souris
mais c'est pas fonctionnel. Aurais-tu une idée Peg' ?
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
24 oct. 2011 à 18:59
La trigo de base est simple, c'est du Pythagore dans un triangle rectangle. (niveau 3ème, je crois)

Tu cherches l'angle du coin opposé en connaissant la distance X et Y des bords de ton angle droit :




L'angle de A = atan2(BC/AB), ce qui te donnera l'angle en radian (d'où la conversion 180/PI).
Et c'est exactement la formule que tu nous as donné dans ta question ...

Peg'
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
24 oct. 2011 à 19:17
Mais la formule flash qui défini ce calcul pas en as2 comme je l'ai formulé dans ma question, mais en as3 comme je le demande dans ma question. Est-ce que tu la connais , s'il te plaît?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
24 oct. 2011 à 19:49
C'est le même ...

sachant que le calcul est exactement le même qu'en AS2 (sauf x et y qu'il faudra changer)


Peg'
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
24 oct. 2011 à 22:37
J'ai pas compris mais c'est pas grave. Je te remercie quand-même de ton aide.
a+ peg
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
24 oct. 2011 à 22:43
Ben le calcul est le même :
//AS2
X = _xmouse-this._x;
Y = _ymouse-this._y;
this._rotation Math.atan2(Y, X)*57; // car 180/Math.PI environ 57 


//AS3
X = mouseX-this.x;
Y = mouseY-this.y;
this.rotation Math.atan2(Y, X)*57; // car 180/Math.PI environ 57 


Il n'y a pas grand choses à comprendre ...

Peg'
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
24 oct. 2011 à 23:19
stage.addEventListener(MouseEvent.MOUSE_MOVE,funccanon);

function funccanon(me:MouseEvent):void{
X = mouseX-this.x;
Y = mouseY-this.y;
this.rotation = Math.atan2(Y, X)*57;
}

Sauf qu'il faut remplacer le this par le non du clip car ce code ne doit pas être contenu dans le clip qui tourne mais dans la scène. si c'est ça, il me répond :
Il me dit en code d'erreur :
1120 : Accès à la propriété non définie X.
1120 : Accès à la propriété non définie Y.

une idée de où ça vient peg ?
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
24 oct. 2011 à 23:23
dsl j'ai supprimé une partie de mon post :

Si j'ai bien compris c'est censé donner ça en as3 :

//appel de fonction par écouteur d'évênement en mousemove dont tu m'as parlé qui //remplace l'enterframe
stage.addEventListener(MouseEvent.MOUSE_MOVE,funccanon);

// le code d'as3 que tu m'as donné précedement
function funccanon(me:MouseEvent):void{
X = mouseX-this.x;
Y = mouseY-this.y;
this.rotation = Math.atan2(Y, X)*57;
}

Sauf qu'il faut remplacer le this par le non du clip car ce code ne doit pas être contenu dans le clip qui tourne mais dans la scène. si c'est ça, il me répond :
Il me dit en code d'erreur :
1120 : Accès à la propriété non définie X.
1120 : Accès à la propriété non définie Y.

une idée de où ça vient peg ?
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
25 oct. 2011 à 10:14
oui, il faut que tu déclares tes variables comme ceci :

var X:int = ... Sinon il n'aime pas.
Bienvenue dans le monde strict de la programmation AS3 ;)

Peg'
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
25 oct. 2011 à 23:41
je suis un …
forcément que X & Y était des variables !

je récapitule :
//--------------------------------------
import flash.events.MouseEvent;

var X:int;
var Y:int;

stage.addEventListener(MouseEvent.MOUSE_MOVE, orientcanonfunc);
function orientcanonfunc(me:MouseEvent):void{
X = mouseX-this.x;
Y = mouseY-this.y;
}
this.rotation = Math.atan2(Y, X)*57;
//this étant renomé au nom du clip qui doit tourner dans la scène principale,
//---------------------------------------
Je m'y met.
Merci et a + peg
0
aerial9 Messages postés 25 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 23 décembre 2011
25 oct. 2011 à 23:54
Yahou ça marche ! Merci beaucoup peg, ce code m'a bien bloqué dans ma quête de faire mon jeu flash en 3d.
J'aurais d'autre questions à te poser mais je dois créer un nouveau sujet sinon (me semble t-il) je ferai entorse à la charte de codes-sources.
C'est la première fois que je post dans ce site, donc je sais pas trop ou aller.
Mon but est de faire un jeux flash fait uniquement de vidéos 3d et d'images que je charge dynamiquement. J'arrive à faire les collisions, les chargements dynamiques du son, image, et vidéos flv, mais je me demande si flash arrivera à gérer autant de données au pixel à 35 ips. J'ai peur de commencer un projet qui ne peut aboutir.
Tu en penses quoi ?

Merci encore Peg ! A+
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
26 oct. 2011 à 15:20
J'en pense que flash est une belle usine à gaz et qu'on peut trés rapidement le faire pédaler dans le semoule.
Reste à voir la version 11 du player et l'accélération métérielle ...

Peg'
0