Accueil > > > MOTEUR DE SIMULATION DE LANCE D'OBJET
MOTEUR DE SIMULATION DE LANCE D'OBJET
Information sur la source
Description
Ce code sans prétention permet de réaliser le tracer d'un ou plusieurs points sur un même objet parmi ceux disponibles. Il ne prend pas en compte la résistance de l'air et ne présente pas de bugs connu.
Source
- frame 1 :
-
- //On stoppe la tête de lecture de la scène principale (root)
- stop();
-
-
- // On crée tout d'abord les variables qui nous seront nécessaires
- // Les valeurs non définis ici le sont dans les zones de textes
-
- // Variable pour l'intervale
- var duration;
- // Variable d'angle
- var angle;
- // Variable pour la vitesse initial de lancement
- var VitesseIni;
- // Variable de pesanteur
- var pesanteurG;
- // Variable pour le nombre de tour
- var nbtour;
- // Variable si servira à définir l'angle de rotation pour chaque image
- var rota = 0;
- // Variable pour le pas (1 image tout les x pixels)
- var intervalex;
- // Variables pour définir le point de lancement
- var x0 = 0;
- var y0 = 650;
- // variable pour définir les limites de la simulation
- var xmax = 1100;
- var ymax = 1100;
- // Variable pour définir l'opacité de chaque images
- var opa;
- // Variable pour définir quel objet est à lancer
- var obje;
- // Variable tableau qui contientra la liste des image créer
- var iter = [];
-
- // On indique les action a effectuer lors du clik sur le boutons go
- go.onRelease = function() {
- // Cette boucle permet de définir quels point seront à afficher et où lors de la simulation
- for (var i = 1; i<=8; i++) {
- // Ici, on dit que la valeur de la variable est inverse a l'hittest avec la zone
- _root["point"+i+"visible"] = !_root.objet["point"+i].hitTest(_root.objet.zone);
- // On memorise pour chaque point ses coordoner par raport a l'objet
- _root["point"+i+"x"] = _root.objet["point"+i]._x;
- _root["point"+i+"y"] = _root.objet["point"+i]._y;
- }
- // Et au final on passe a la frame suivante
- play();
- };
- // On dit que lors du click sur la flèche dirigé vers la droite, on va a l'objet précédent
- _root.btn_prev.onRelease = function() {
- _root.objet.objet.prevFrame();
- };
- // On dit que lors du click sur la flèche dirigé vers la gauche, on va a l'objet suivant
- _root.btn_suiv.onRelease = function() {
- _root.objet.objet.nextFrame();
- };
- // On autorise tout les points à être déplacable
- for (i=1; i<=8; i++) {
- _root.objet["point"+i].onPress = function() {startDrag(this);};
- _root.objet["point"+i].onRelease = function() {stopDrag();};
- }
- // Ici on remet l'objet précédament séléctionner dans le cas d'un retour après une première simulation
- _root.objet.objet.gotoAndPlay(_root.obje);
- // Idem pour les points
- for (i=1; i<=8; i++) {
- _root.objet["point"+i]._x = _root["point"+i+"x"];
- _root.objet["point"+i]._y = _root["point"+i+"y"];
- }
-
- -----------------------------
-
- Frame 2:
-
- //On stoppe la tête de lecture de la scène principale (root)
- stop();
- // On définit les action correspondant à un clik sur le bouton retour
- _root.retour.onRelease = function() {
- // On commence par arrèter l'intervale si la simulation est encore en cours
- clearInterval(IntervalID);
- // Puis on supprime tout les images grace au tableau "iter" contenant la lister des immages déja créée
- for (var i in iter) {
- removeMovieClip(iter[i]);
- }
- // Et pour finir, on revien à la frame 1
- gotoAndPlay(1);
- };
- // On crée la fonction qui servira a calculer l'ordonner (y) en fonction de l'absyse (x)
- parabole = function (pesanteurG, VitesseIni, angle, X0, Y0, X) {
- // On converti les degrés en radians car la classe Math utillise des radians
- radian = Math.PI/180*angle;
- // On applique la formule
- Y = 0.5*pesanteurG*Math.pow(((X-X0)/(VitesseIni*Math.cos(radian))), 2)-(X-X0)*Math.tan(radian)+Y0;
- // Et on renvoi la valleur obtenu
- return Y;
- };
-
- // Pour le début de la simulation, x = x0
- x = x0;
- y = 1;
- // On déclare la fonction qui sera par la suite appeler à intervals régulier par setinterval
- function intervale() {
- // on commence par incrémenter à la variable x la valleur du pas
- x += parseInt(intervalex);
- // On test savoi si les valeurs de x OU de Y sont hors immage
- if (x<=xmax && y<=ymax) {
- // Si oui:
- // On calcul y en fonctin de x
- y = parabole(pesanteurG, VitesseIni, angle, x0, y0, x);
- // On crée une image sur la scène et on lui affecte les coordonés calcuées
- reference = _root.attachMovie("object", "object"+x, x, {_x:x, _y:y});
- // On fait en sorte que l'objet affiché soit celui choisi
- _root.reference.objet.gotoAndPlay(obje);
- // On crée une boucle pour placer les points et pour les rendre visible/invisible selon leur variables respectifs
- for (i=1; i<=8; i++) {
- // On place les poit selon les coordoner interne au clip sauvegader précédament dans des variables
- reference["point"+i]._x = _root["point"+i+"x"];
- reference["point"+i]._y = _root["point"+i+"y"];
- // On rend les points visible ou invisible
- reference["point"+i]._visible = _root["point"+i+"visible"]
- }
- // On masque la zone de détection des points
- reference.zone._visible = false;
- // On règle la transparance de l'objet
- reference.objet._alpha = opa;
- // On incrémente la variable de rotation avec un calcul déterminant l'angle de rotation entre chaque image à partir du nombre total de point
- rota += (360*nbtour)/(xmax/intervalex);
- // On affecte cette variable à la roation de l'image (objet et points)
- reference._rotation = rota;
- // Et on inclu cette image dans la liste complère affin de pouvoir l'effacer facilement plus tard
- iter.push(reference);
- } else {
- // si non: on efface l'intervalle et donc on stoppe la simulation
- clearInterval(IntervalID);
- }
- }
- // On crée l'intervale affin de répéter la fonction a interval régulié
- IntervalID = setInterval(this, "intervale", duration);
frame 1 :
//On stoppe la tête de lecture de la scène principale (root)
stop();
// On crée tout d'abord les variables qui nous seront nécessaires
// Les valeurs non définis ici le sont dans les zones de textes
// Variable pour l'intervale
var duration;
// Variable d'angle
var angle;
// Variable pour la vitesse initial de lancement
var VitesseIni;
// Variable de pesanteur
var pesanteurG;
// Variable pour le nombre de tour
var nbtour;
// Variable si servira à définir l'angle de rotation pour chaque image
var rota = 0;
// Variable pour le pas (1 image tout les x pixels)
var intervalex;
// Variables pour définir le point de lancement
var x0 = 0;
var y0 = 650;
// variable pour définir les limites de la simulation
var xmax = 1100;
var ymax = 1100;
// Variable pour définir l'opacité de chaque images
var opa;
// Variable pour définir quel objet est à lancer
var obje;
// Variable tableau qui contientra la liste des image créer
var iter = [];
// On indique les action a effectuer lors du clik sur le boutons go
go.onRelease = function() {
// Cette boucle permet de définir quels point seront à afficher et où lors de la simulation
for (var i = 1; i<=8; i++) {
// Ici, on dit que la valeur de la variable est inverse a l'hittest avec la zone
_root["point"+i+"visible"] = !_root.objet["point"+i].hitTest(_root.objet.zone);
// On memorise pour chaque point ses coordoner par raport a l'objet
_root["point"+i+"x"] = _root.objet["point"+i]._x;
_root["point"+i+"y"] = _root.objet["point"+i]._y;
}
// Et au final on passe a la frame suivante
play();
};
// On dit que lors du click sur la flèche dirigé vers la droite, on va a l'objet précédent
_root.btn_prev.onRelease = function() {
_root.objet.objet.prevFrame();
};
// On dit que lors du click sur la flèche dirigé vers la gauche, on va a l'objet suivant
_root.btn_suiv.onRelease = function() {
_root.objet.objet.nextFrame();
};
// On autorise tout les points à être déplacable
for (i=1; i<=8; i++) {
_root.objet["point"+i].onPress = function() {startDrag(this);};
_root.objet["point"+i].onRelease = function() {stopDrag();};
}
// Ici on remet l'objet précédament séléctionner dans le cas d'un retour après une première simulation
_root.objet.objet.gotoAndPlay(_root.obje);
// Idem pour les points
for (i=1; i<=8; i++) {
_root.objet["point"+i]._x = _root["point"+i+"x"];
_root.objet["point"+i]._y = _root["point"+i+"y"];
}
-----------------------------
Frame 2:
//On stoppe la tête de lecture de la scène principale (root)
stop();
// On définit les action correspondant à un clik sur le bouton retour
_root.retour.onRelease = function() {
// On commence par arrèter l'intervale si la simulation est encore en cours
clearInterval(IntervalID);
// Puis on supprime tout les images grace au tableau "iter" contenant la lister des immages déja créée
for (var i in iter) {
removeMovieClip(iter[i]);
}
// Et pour finir, on revien à la frame 1
gotoAndPlay(1);
};
// On crée la fonction qui servira a calculer l'ordonner (y) en fonction de l'absyse (x)
parabole = function (pesanteurG, VitesseIni, angle, X0, Y0, X) {
// On converti les degrés en radians car la classe Math utillise des radians
radian = Math.PI/180*angle;
// On applique la formule
Y = 0.5*pesanteurG*Math.pow(((X-X0)/(VitesseIni*Math.cos(radian))), 2)-(X-X0)*Math.tan(radian)+Y0;
// Et on renvoi la valleur obtenu
return Y;
};
// Pour le début de la simulation, x = x0
x = x0;
y = 1;
// On déclare la fonction qui sera par la suite appeler à intervals régulier par setinterval
function intervale() {
// on commence par incrémenter à la variable x la valleur du pas
x += parseInt(intervalex);
// On test savoi si les valeurs de x OU de Y sont hors immage
if (x<=xmax && y<=ymax) {
// Si oui:
// On calcul y en fonctin de x
y = parabole(pesanteurG, VitesseIni, angle, x0, y0, x);
// On crée une image sur la scène et on lui affecte les coordonés calcuées
reference = _root.attachMovie("object", "object"+x, x, {_x:x, _y:y});
// On fait en sorte que l'objet affiché soit celui choisi
_root.reference.objet.gotoAndPlay(obje);
// On crée une boucle pour placer les points et pour les rendre visible/invisible selon leur variables respectifs
for (i=1; i<=8; i++) {
// On place les poit selon les coordoner interne au clip sauvegader précédament dans des variables
reference["point"+i]._x = _root["point"+i+"x"];
reference["point"+i]._y = _root["point"+i+"y"];
// On rend les points visible ou invisible
reference["point"+i]._visible = _root["point"+i+"visible"]
}
// On masque la zone de détection des points
reference.zone._visible = false;
// On règle la transparance de l'objet
reference.objet._alpha = opa;
// On incrémente la variable de rotation avec un calcul déterminant l'angle de rotation entre chaque image à partir du nombre total de point
rota += (360*nbtour)/(xmax/intervalex);
// On affecte cette variable à la roation de l'image (objet et points)
reference._rotation = rota;
// Et on inclu cette image dans la liste complère affin de pouvoir l'effacer facilement plus tard
iter.push(reference);
} else {
// si non: on efface l'intervalle et donc on stoppe la simulation
clearInterval(IntervalID);
}
}
// On crée l'intervale affin de répéter la fonction a interval régulié
IntervalID = setInterval(this, "intervale", duration);
Conclusion
Ce code peut trouver une application dans la démonstration de la parabole formé par le centre de gravité par rapport au référentiel terrestre lors du lancement d'un objet en 1ere S (c'est d'ailleurs le cour sur le sujet dans ma classe qui m'a inspiré ce code)
Historique
- 09 novembre 2008 07:06:18 :
- correction selon les conseils de peg
- 09 novembre 2008 14:16:52 :
- Code amélioré grâce a l'astuce de mansuz (~75 ligne maintenant contre ~180 avant) et surtout commenter de A à Z
J'ai désendu cette source d'un rang car elle es simple a comprendre avec les commentaires pour presque chaque ligne de code
J'ai également ajouter les sources au format TXT et flash 8 dans le zip
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
animation physique [ par lhanneus ]
Je suis un NEWBIEpeut on imposer un déplacement selon une équation mathématique ? si oui , quelle sont toute les opérations mathématique possible , ex
???changer la taille du document via les actionscript ??? [ par AkasLaBarak ]
ERROR (404 {Voila j'ai un petit problème , j'aimerais choisir une taille pour mon document flash Mx alléatoirement via les actions scripts sans passer
Actionscript et les variables [ par phobus ]
Hello.Bon alors je résume vite fait pour qu'il n'y ait pas de malentendu, je débute l'actionscript et j'en suis nulle part.La seule expérience que j'a
Opération mathématique [ par greatspirit ]
Eske le flash peut calculer un Modulo??Great Spirit
A l'aide!! :'( [ par greatspirit ]
SalutG programmé l'ébauche d'un crypteur pour mon tpe mais bien ke la partie mathématique soit correcte, g encore kk bugs ki l'empèchent de fonctionne
bouger un movieclip en actionscript [ par deldimed ]
Bonjour à tous,je voudrais donner une impression de secouer une animation lorsque la souris passe sur cette dernière.j'ai déja passer pas un code suiv
mx2004pro actionscript mode basic [ par samylatortue ]
Salut,bon surement une question posé plusieurs fois, mais j'ai chercher sur le forum je n'ai pas trouver de réponse...j'avais l'habitude d'utiliser fl
apprendre actionscript [ par christophe2663 ]
bonjourj'ai décidé de me mettre à la programmation actionscript et j'aimerai avoir vos avis sur des livres pédagogiques et bien fait sur ce sujet et q
actionscript [ par angeleus ]
Bonjour,je suis débutant en actionscript, mais autrement j'utilise très bien flash mxje voudrais commencer à faire des truc sympa en programmation, j'
ActionScript : text de saisi ...vider? [ par lemalter ]
sur mon site :http://athomelibre.free.fr/conjugaisonje souhaite vider le texte de saisi quand on pesse a 1 nouveau temps...je ne sai pas si c possible
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|