Boules aimantées contrôlées par la souris

Description

Depuis le temps que je rêve d'une telle source, j'ai fini par la réaliser...

C'est un effet de boules aimantées (donc collées les unes aux autres) que on peut faire bouger avec la souris.

Vous trouvere dans le ZIP une application : le slalom. Je pense que l'on peut créer à partir de ceci un jeu stratégique et d'abilleté ; mais ça demande encore un peut de développement...

[Pour mettre un effet de pesanteur (poids) sur les billes il vous suffit de cliquer.]

------------------------------------------------------------------------------
Créez un nouveau fichier avec un clip nommé "B0", et mettez ce code...

_root.onLoad = function() { N = 200;
for (i=1; i<=N; i++) {
_root.B0.duplicateMovieClip("B"+i, -i);
_root["B"+i]._x = B0._x+(i-1)*20;
_root["B"+i]._y = B0._y;
}; B0.startDrag(true);
};
function Aimant(n, p) {
R = 1; Px = 0; Py = 10;
for (i=1; i<=n; i++) { j = i-1;
x = _root["B"+i]._x-_root["B"+j]._x;
y = _root["B"+i]._y-_root["B"+j]._y;
sinA = y/Math.sqrt(x*x+y*y);
cosA = x/Math.sqrt(x*x+y*y);
y = R*sinA; x = R*cosA;
_root["B"+i]._x = _root["B"+j]._x+x;
_root["B"+i]._y = _root["B"+j]._y+y;
}
}
_root.onEnterFrame = function() { Aimant(N, P); };

l'effet est vachement trop cool
(prennez le même clip que moi : la boule rouge)

Source / Exemple :


//SuperDevy 25/06/2004
_root.onLoad = function() {
	// Nombre & rayon des boules :
	N=10, R=20;
	for (i=1; i<=N; i++) {
		_root.B0.duplicateMovieClip("B"+i, -i);
		_root["B"+i]._x = B0._x+(i)*R*Math.SQRT1_2;
		_root["B"+i]._y = B0._y+(i)*R*Math.SQRT1_2;
	}
	for (i=0; i<=N; i++) {
		set("numB"+i, i);
		_root["B"+i].onPress = function() {
			this.startDrag();
			_root.num = eval("num"+this._name);
			_root.onMouseMove = function() {
				Aimant(N, num);
			};
			this.onMouseUp = function() {
				stopDrag();
				delete _root.onMouseMove;
				delete this.onMouseUp;
			};
		};
	}
};
function Aimant(total, boule) {
	for (i=boule+1; i<=total; i++) {
		j = i-1;
		x = _root["B"+i]._x-_root["B"+j]._x;
		y = _root["B"+i]._y-_root["B"+j]._y;
		sinA = y/Math.sqrt(x*x+y*y);
		cosA = x/Math.sqrt(x*x+y*y);
		y = R*sinA;
		x = R*cosA;
		_root["B"+i]._x = _root["B"+j]._x+x;
		_root["B"+i]._y = _root["B"+j]._y+y;
	}
	for (i=boule-1; i>=0; i--) {
		j = i+1;
		x = _root["B"+i]._x-_root["B"+j]._x;
		y = _root["B"+i]._y-_root["B"+j]._y;
		sinA = y/Math.sqrt(x*x+y*y);
		cosA = x/Math.sqrt(x*x+y*y);
		y = R*sinA;
		x = R*cosA;
		_root["B"+i]._x = _root["B"+j]._x+x;
		_root["B"+i]._y = _root["B"+j]._y+y;
	}
}

J'ai supprimé le poids dans cette nouvelle version parce qu'il ne me semblait pas utile.

Conclusion :


Les hics à rectifier dans la prochaine version :
- créer une détection de toutes les billes entre-elles pour qu'elles ne se traversent pas.
- améliorer le système de poids : la vitesse de chute due au poids est constante alors qu'elle est uniformément accélérée dans la réalité.
- économiser les ressources système : avec 50 billes, ça se met vite à lagger...
- Et sûrement d'autres...

En ce qui concerne le slalom, on peut élever le niveau en augmentant le nombre de billes ou le nombre de plots ou bien en rapprochant les plots...

Codes Sources

A voir également

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.