Roue de la fortune, du destin, etc (entierement as)

Description

Ce code permet de faire tourner une roue découpée en X morceaux, et de la faire s'arreter quand on veut sur la case que l'on veut.
Le morceau pointé à la fin par la flèche peut-être soit déterminé aléatoirement soit manuellement (cela permet par exemple de récupérer la case à afficher par un script PHP).
Il est possible de déterminer le nombre de tours qu'effectue la roue avant de ralentir.
Il est possible de déterminer une marge pour éviter que la flèche soit trop proche des limites entre les cases.
Ce script prend en compte un clip de roue flouée, pour donner un pti effet de vitesse (dans l'exemple il est très moche ^^).

Voilà, il y a bien sur des améliorations à faire, mais ce code fonctionne.

Source / Exemple :


var tabCouleurs=["violet","orange","magenta","cyan","jaune","bleu","vert","rouge"];//Votre tableau avec les possibilités
var ecartSecu=10;//Marge par rapport aux limites
var nbTours=10;//Le nombre de tours avant l'arret

var tabAngles = new array();//Le tableau qui accueillera les fourchettes des angles possibles en fonctions de la couleur

var largeurTranche=(360/tabCouleurs.length)-ecartSecu;//la largeur d'une tranche de couleur

//On détermine nos tranches en prenant compte de l'écart de sécurité
for(var i=0;i<tabCouleurs.length;i++){	
	var tabAnglesTemp=new Array();
	tabAnglesTemp.push((i+1)*ecartSecu+i*largeurTranche);
	tabAnglesTemp.push((i+1)*ecartSecu+(i+1)*largeurTranche-ecartSecu);
	tabAngles.push(tabAnglesTemp);	
}

//fait tourner la roue
function tournerRoue(){
	
	decompte--;
	if(decompte==0){//Si le décompte est à zéro on enclenche le ralentit		
		arret=true;	
	}
	
	if(arret==true && coeffRotation>0){//Diminue le coeffRotation=>roue ralentit, et efface l'effet de flou
		roueFloue._alpha-=100/coeffRotation;
		coeffRotation-=1;
	}else if(arret==true && coeffRotation<=0){//Si la roue est à l'arret on supprime l'intervalle		
		clearInterval(IDInterval);
	}
	
	roue._rotation+=coeffRotation;//On effectue une rotation au clip de la roue en fonction du coeff rotation
	roueFloue._rotation=roue._rotation;//La roue floue suit la roue normale	
	updateAfterEvent();//Pas forcément nécessaire
}

//Lance la roue
function lancerRoue(){	
	
	//On supprime les clips et l'intervalle s'il s'agit d'un deuxième lancé
	roue.removeMovieClip();
	roueFloue.removeMovieClip();
	fleche.removeMovieClip();
	clearInterval(IDInterval);
	
	//Soit le numéro du lot est aléatoire soit vous le choisissez
	numLot=Math.floor(Math.random()*tabCouleurs.length);
	//numLot=2;
	_root.nomLot=tabCouleurs[numLot];
	
	//on place nos clips sur la scène
	attachMovie("roue","roue",2);
	roue._x=280;
	roue._y=75;
	attachMovie("roueFloue","roueFloue",3);
	roueFloue._x=roue._x;
	roueFloue._y=roue._y;
	roueFloue._alpha=100;	
	attachMovie("fleche","fleche",4);
	fleche._x=roue._x;
	fleche._y=roue._y-(roue._height/2)-fleche._height/2;
	
	coeffRotation=360/(tabCouleurs.length);//L'angle de rotation au début est de 360°/nbCouleurs
	arret=false;//La roue est en marche	
	decompte=nbTours*tabCouleurs.length;//Un décompte qui permet d'effectuer un certain nombre de tours avant de ralentir
	
	//Roration de départ en fonction de la case choisie
	roue._rotation=Math.floor(Math.random()*(tabAngles[numLot][1]-tabAngles[numLot][0])+tabAngles[numLot][0])+3*coeffRotation;
		
	IDInterval=setInterval(tournerRoue,30);//on appelle la méthode toutes les 30ms
}
lancerRoue();//on lance la roue au début

//Bouton de relance
relancer.onPress = function(){
	lancerRoue();
}
stop();

Conclusion :


Créer trois clips : "roue", "roueFloue" et "fleche" et faites les liaisons.

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.