aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 décembre 2011
-
23 oct. 2011 à 16:49
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDerniè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 :
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
};
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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)
aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 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 :
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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 ...
aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.
aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 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.
aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 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
aerial9
Messages postés25Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention23 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 ?
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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 ...