Animation molécules, avec : duplication simple -> destruction / rotation / mouvement / changement alpha

Soyez le premier à donner votre avis sur cette source.

Vue 14 884 fois - Téléchargée 2 308 fois

Description

Animation de molécules carrée, la forme importe peu, c'est l'action script qui est important, vous pouvez changer le symbole par quelque chose de plus joli.

L'animation charge un nombre initial de molécule -> explosion de celle-ci qui sortent de l'écran. Le but de ce genre d'animation c'est d'explorer un univers complexe et trés chargé.

Les molécules se déplacent aléatoirement, avec des vitesses aléatoires, sortent de l'écran puis reviennent, se dupliquent aléatoirement comme pour laisser une trace qui s'estompe.

Tout est paramétrable, et 100% action script. Vous pouvez aussi mettre l'animation en fond pour animer une baniére ou autre.

Source / Exemple :


// Sur le FRAME 1 :
var acceleration = 10;
var max_dist = 1000;
var max_out = 10;
var rotate_speed = 10;
var max_alpha = 80;
var min_alpha = 40;
var speed_alpha = 6;

_root.totalDepht = 50;

for (i=0; i<_root.totalDepht-1; i++) {
	_root["clipBouge"].duplicateMovieClip("cp"+i, i+1);
	setProperty("cp" + i, _x, random(600));
	setProperty("cp" + i, _y, random(400));
	setProperty("cp" + i, _alpha, random(max_alpha-min_alpha)+min_alpha);
}
stop();

// Dans la MovieClip clipBouge -> FRAME 1
onClipEvent (enterFrame) {
	if (this.mode==1) {
		if (this._alpha>0) {
			this._alpha -= 10;
		} else {
			this.removeMovieClip();
		}
		return false;
	}
	if (this.go_x<1 || (this._x == this.go_x && this._y == this.go_y) || (this.a_x<1 && this.a_y<1)) {
		this.rgo_x = random(_root.max_dist);
		this.rgo_y = random(_root.max_dist);
		this.go_x += random(this.rgo_x)-(this.rgo_x/2);
		this.go_y += random(this.rgo_y)-(this.rgo_y/2);
		if (this.go_x < -10 || this.go_y < -10 || this.go_x>600 || this.go_y>400) {
			this.is_out +=1
			this.b_out = true;
			if (this.is_out>_root.max_out) {
				this.is_out = 0;
				this.go_x = random(600);
				this.go_y = random(400);				
			}
		} else {
			this.is_out = 0;
			this.b_out = false;
		}
		this.distance = Math.abs(this.go_x - this._x) / Math.abs(this.go_y - this._y);
		this.inc = this.distance / _root.acceleration;
		this.acc = _root.acceleration;
		this.bouge += 1;
		if (this.bouge % 10 == 0 && this.b_out == false) {
			var nom = "f_"+this._name+"_"+this.bouge;
			_root.totalDepht += 1;
			this.duplicateMovieClip(nom, _root.totalDepht);
			setProperty(nom, _x, this._x);
			setProperty(nom, _y, this._y);
			this._parent[nom].mode = 1;
		}
	}
	
	this._parent["btnClip"]._rotation += random(_root.rotate_speed);
	
	this._parent._alpha += random(_root.speed_alpha) - (_root.speed_alpha/2);
	
	if (this._parent._alpha<_root.min_alpha) {
		this._parent._alpha = _root.min_alpha;
	}
	
	if (this._parent._alpha>_root.max_alpha) {
		this._parent._alpha = _root.max_alpha;
	}
	
	if (this._parent["btnClip"]._rotation>360) {
		this._parent["btnClip"]._rotation = 0;
	}
	
	this.a_x = (this.go_x-this._x) / this.acc;
	this._x += a_x;
	this.a_y = (this.go_y-this._y) / this.acc;
	this._y += a_y;
}

Conclusion :


Aucun bug connu pour le moment, si vous avez utilisé cette animation vous pouvez m'envoyer un lien, je le donnerais en exemple sur cette page.

Bonne prog à tous, akh

Codes Sources

A voir également

Ajouter un commentaire Commentaires
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
15 juin 2005 à 20:39
Clip1_Clip2/Clip3._x marche pas, tu mélanges les 2 syntaxes ...

Modifies par : this("clip"+i)._x++ (A+=1 => A++)

Peg'
aKheNathOn
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

15 juin 2005 à 20:33
lol Peg, pas mal l'explication, 90% de ce que tu as dit je le conaissais pas. C ça le désavantage d'apprendre en regardant des codes ... le risque étant d'apprendre des mauvaises méthodes, et de les reproduire.

Pour ma part Clip1/Clip2/Clip3._x=200 ça me va. Est-ce que je peux écrire ça :

for (i=0; i<10; i++) {
("clip" + i)._x += 1;
}

par exemple ...
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
15 juin 2005 à 19:48
moi on me pose une question, j'y réponds du mieux possible .. sans pré-mâcher la réponse, histoire de faire unpeu marcher vos cerveaux !;)

Mais puisque réfléchir vous aide encore moins, je vais tout vous expliquer de A à Z sur les avances de syntaxes entre Flash 4 et Flash7 (plus précisément, depuis Flash 5.0) :

Alors avant Flash 5 était la syntaxe à "/" référence à l'arborescence HTML, tels que pour appeller une variable dans un clip, il fallait écrire : Clip1/Clip2/Clip3:Variable
Puis vient Flash 5.0 et sa syntaxe un peu bizarre au début, mais bien plus simple. Dite "syntaxe à point", elle améliore la disponibilité des clips en simplifiant l'écriture. Le même appel à la variable dans les clips donnerait : Clip1.Clip2.Clip3.Variable

De même que certaines fonction tels que "getProperty" et "setProperty" sont devenues obsolètes, car : setProperty(Clip1/Clip2/Clip3, _x, 200); devient : Clip1/Clip2/Clip3._x=200; Bien plus lisible (non ?)

Alors si on utilises "setProperty" il faudrait aussi réutiliser la syntaxe à "/", vous verrez, ça marche aussi !!! Mais franchement, les petits gars qui viennent voir votre code et se disent "tiens, Set(A, B) d'est cool ..." alors que "A=B" éviterai d'apprendre des trucs dépassés, même si ça marche !

Je développe ou tout le monde à compris ?

Peg' (Fier et surtout quand ça vous emm**** .. non mais!)
aKheNathOn
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

15 juin 2005 à 19:12
je suis celui concerné par ce message, et faut mettre de coté sa soi dissons fierté. Je suis d'accord avec pagase, si c'est fonction est vieille et non optimisée elle ne devrais pas être utilisée.

Comme je l'ait dit, je débute, et je ne le savais pas. J'ai un mélange entre les vieilles sources et les nouvelles, donc j'ai pas essayé de calculer.

Elle m'arrange bien car quand je crée des objets dynamiques je peux aisement les manipuler. L'alternative est d'utiliser des tableaux qui répértorient ces objets style _root["obj"+variable] ou bien this["obj"+variable] ...

Si on y réfléchit, pour atteindre un objet et une valeur c'est mieux d'utilise le pointeur de la variable à la place d'une fonction (en principe ça risque d'être au moins 2 fois moins rapide).

Avec la fonction :
pile d'appel -> fonction -> Pointeur vers objet -> Propriétée

Avec le pointeur directement :
Pointeur vers objet -> Propriétée

Je sais pas, je me gourre peut être en tout cas une chose est sûr, ça va pas être visible sur les ticks machine pour un simple appel, mais pour des animations ça risque de faire perdre quelques Milli-secondes.

Ainsi pegase -> motion adaptée :)
mathadore
Messages postés
7
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
25 octobre 2005

15 juin 2005 à 18:08
un commentaire sibylin de pegase qui ne fait pas avancer le chemelemele
La question que je pose est donc comment faire autrement que set property ?
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.