begin process at 2012 05 26 06:27:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > MOTEUR DE SIMULATION DE LANCE D'OBJET

MOTEUR DE SIMULATION DE LANCE D'OBJET


 Information sur la source

Note :
Aucune note
Catégorie :ActionScripts Classé sous :physique, moteur, actionscript, parabole, mathématique Niveau :Débutant Date de création :08/11/2008 Date de mise à jour :09/11/2008 14:16:51 Vu / téléchargé :6 110 / 448

Auteur : remy2501

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

Source avec Zip Source avec une capture MULTI-DEBRID
Source avec Zip EXPOGEN AS3 VESION 0.8

 Sources de la même categorie

Source avec Zip Source avec une capture OUVRIR UNE ANIMATION EXTERNE DANS UN CLIP VIDE. par KcHeY
Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture PARTICULE SYSTEM par yasdar
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML par yasdar

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OUVRIR UNE ANIMATION EXTERNE DANS UN CLIP VIDE. par KcHeY
Source avec Zip Source avec une capture GUITARE ZÉRO 1 LE MOTEUR LOURD par titouanbaillon
Source avec Zip Source avec une capture COMPOSANT SWC CALENDAR DATE PICKER POUR FLASH CS5 AS3 par nicoflashkod
Source avec Zip Source avec une capture CALCUL DE PI PAR L'ÉQUATION DE LEIBNIZ EN AS3 par Clem_02
Source avec Zip Source avec une capture MENU CARROUSEL FULL 3D CS4 par gremlins7

Commentaires et avis

Commentaire de pegase31 le 09/11/2008 00:38:40 administrateur CS

salut,

Je vais te donner un petit truc de code :

visible = 1;
monClip._visible = visible;

Peg'

Commentaire de remy2501 le 09/11/2008 06:24:42

merci peg, on en apprend tous les jours :)
je ne savait pas qu'on pouvait directement mettre une valeur 0 ou 1 en booleen sans procéder à un changement de variable

sinon, pense tu que l'on puisse concaténer des variable (par exemple point + i) pour former un nom d'occurrence, ça me permettais de réduite a une simple boucle for tout mes variable et ainsi gagner en lisibilité !!

sinon, le code est mis a jour avec ta proposition et bientôt, il sera commenté ;)

Commentaire de Mansuz le 09/11/2008 09:21:37

salut,

this["point"+i]._x+=2;

Commentaire de BananaTree le 19/11/2008 01:58:14

slt,

ce qui donne en as3:
var visibility:Boolean = false;
visibility = 1;
myMc.visible = visibility;
=> Warning: 3590: int used where a Boolean value was expected.  The expression will be type coerced to Boolean.

ce qui n'est pas faux, mais moi perso je l' ferai pas!

++

Commentaire de pegase31 le 19/11/2008 07:59:21 administrateur CS

Je n'ai jamais dit que ça passait en as3 ... ;)

Peg'

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales