Bon dernière source de la journée ^^ j'ai développé çà cet aprem.
Alors qu'est-ce que c'est ? Un Shoot'em up en 2d simple, avec une partie jeu et une partie admin...
"Admin" ? Oui ! Ouvrez le fla, passez en mode admin, et vous pouvez définir où vos monstre apparaitront. Vous pouvez alors générer le code à copier/coller dans le code. Ce petit bout de code correspond au tableau qui contient les coordonnées. Repassez en mode joueur, après avoir fait cela, et vos monstres apparaitront où vous le souhaitiez !
Pour passer d'un mode à l'autre, modifier la variable "version" au début du code.
En Admin :
Drag sur le monstre => duplique un nouveau monstre.
Générer => céer le code, en fonction des monstres placés
Barre d'espace => cache le monstre modèle, le bouton, et le champ
Flèche haut/bas, pendant que vous draggez un monstre => agrandit/rapeticie le clip du monstre
Flèche gauche/droite, pendant que vous draggez un monstre => tourne le clip à gauche/droite
Vous pouvez modifier les quelques clips comme vous le souhaitez, et crée ainsi de nombreux shoot'em up aux univers différents ^^
Le code est comme d'habitude bien commenté :)
Source / Exemple :
//Les positions possibles des monstres : x,y,%taille,rotation
var tabPositions=[[65,69,60,10],[127.95,72,50,105],[40.95,82,70,-175],[91.95,241.95,40,25],[57.95,242.95,50,-5],[125.95,261.95,40,30],[385.95,88,75,-45],[423.95,71,75,0],[465.95,69,60,45],[16,499.95,165,30],[65,532.95,145,35],[214.95,415.95,60,-75],[230.95,414.95,55,20],[340.95,314.95,125,-40],[329.95,367.95,140,85],[357.95,257.95,40,-5],[379.95,284.95,50,55],[605.95,266.95,35,-45],[633.95,262.95,30,25],[631.95,402.95,110,-60],[639.95,391.95,100,60]];
var nbMonstresTotal=100;//Le nombre de monstre à faire apparaitre
var nbMonstres=0;//Le nombre de monstres générés
var vitesseRetraitMonstresMax=2000;//Le temps de retrait d'un monstre max
var vitesseRetraitMonstresMin=300;//Le temps de retrait d'un monstre min
var ecartApparitionMax=2000;//Le temps d'apparition entre chaque monstre max
var ecartApparitionMin=100;//Le temps d'apparition entre chaque monstre min
var score=0;//Le score du joueur
var version="joueur";//"admin" ou "joueur"
var spaceDown=false;//Utile pour gérer la barre d'espace en mode admin
//ajoute un monstre au jeu
function nouveauMonstre(){
clearInterval(IntervalMonstres);//On supprime l'interval qui a fait apparaitre ce monstre
var positionMonstre=Math.floor(Math.random()*tabPositions.length);//on définit la position de ce nouveau monstre parmi toutes celles enregistrées
attachMovie("monstre","monstre"+nbMonstres,100+nbMonstres);//on place le clip sur la scène
this["monstre"+nbMonstres].tabPositionOccupee=tabPositions[positionMonstre];//on garde en mémoire la position occupée par e monstre
this["monstre"+nbMonstres]._x=tabPositions[positionMonstre][0];//on le place sur l'axe des abscissses
this["monstre"+nbMonstres]._y=tabPositions[positionMonstre][1];//on le place sur l'axe des ordonnées
this["monstre"+nbMonstres]._xscale=tabPositions[positionMonstre][2];//On modifie sa taille
this["monstre"+nbMonstres]._yscale=tabPositions[positionMonstre][2];//On modifie sa taille
this["monstre"+nbMonstres]._rotation=tabPositions[positionMonstre][3];//On effectue la rotation
tabPositions.splice(positionMonstre,1);//On enlève la position du monstre dans le tableau qui contient toutes les positions
//fonction retour du monstre, appelée au bout de x secondes
this["monstre"+nbMonstres].retour = function(){
tabPositions.push(this.tabPositionOccupee);//On replace dans le tableau contenant toutes les positions, celle que le monstre occupait
this.play();//Anim de retour
}
//Fonction de clic sur le monstre
this["monstre"+nbMonstres].onPress = function(){
this.enabled=false;
tabPositions.push(this.tabPositionOccupee);//On replace dans le tableau contenant toutes les positions, celle que le monstre occupait
this.gotoAndPlay("disparition");//Anim de disparition/explosion
score++;//+1 au score
}
//on définit la vitesse de retrait de ce monstre, on appelle la méthode "retour" au bout de ce temps
vitesseRetraitMonstres=vitesseRetraitMonstresMax-(vitesseRetraitMonstresMax-vitesseRetraitMonstresMin)*(nbMonstres/nbMonstresTotal);
setInterval(this["monstre"+nbMonstres],"retour",vitesseRetraitMonstres);
//On détermine le temps avant l'apparition du nouveau monstre
ecartApparition=ecartApparitionMax-(ecartApparitionMax-ecartApparitionMin)*(nbMonstres/nbMonstresTotal);
if(nbMonstres<nbMonstresTotal)//S'il reste des monstres à afficher
IntervalMonstres=setInterval(this,"nouveauMonstre",ecartApparition);//On appelle la fonction
else
nbMonstres="fin";//C'est fini
nbMonstres++;//On indique que l'on a ajouté un nouveau monstre
}
//Fonction appelée en mode admin. Permet de générer un tableau de position
function admin(){
//On vérifie si la touche espace a été appuyée. Si oui on affiche/cache, les outils.
this.onEnterFrame=function(){
if(Key.isDown(Key.SPACE)){
if(spaceDown){
spaceDown=false;
generer._visible=false;
graphMonstre._visible=false;
positionsTexte._visible=false;
}else{
spaceDown=true;
generer._visible=true;
graphMonstre._visible=true;
positionsTexte._visible=true;
}
}
}
premierPlan._alpha=50;//POur voir les monstres derrière le premier plan, on réduit l'opacité
//On place sur la scène le bouton de génération des coordonnées
attachMovie("generer","generer",99);
generer._x = -75;
generer._y = 100;
//Si l'on clique sur ce bouton
generer.onPress = function(){
//On crée un champ texte
this._parent.createTextField("positionsTexte",5000,25,25,150,10);
this._parent.positionsTexte.background=true;
this._parent.positionsTexte.autoSize=true;
this._parent.positionsTexte.multiline=true;
this._parent.positionsTexte.wordWrap=true;
this._parent.positionsTexte.text="";
//on affiche dedans les données à copier/coller dans le code. ATTENTION à la virgule de trop à la fin
for(var i=0;i<this._parent.nbMonstres;i++){
this._parent.positionsTexte.text+="["+this._parent["graphMonstre"+i]._x+","+this._parent["graphMonstre"+i]._y+","+this._parent["graphMonstre"+i]._xscale+","+this._parent["graphMonstre"+i]._rotation+"],"
}
}
//On place sur la scène un modèle de monstre
attachMovie("graphMonstre","graphMonstre",100);
graphMonstre._x = -75;
graphMonstre._y = -50;
//Quand on clique dessus
graphMonstre.onPress = function(){
//On duplique le clip et on commence le drag
this.duplicateMovieClip("graphMonstre"+nbMonstres,101+nbMonstres);
this._parent["graphMonstre"+nbMonstres].deplacement=true;
this._parent["graphMonstre"+nbMonstres].startDrag();
//Permet de gérer le drag and drop après avoir posé le monstre la première fois
this._parent["graphMonstre"+nbMonstres].onPress = function(){
this.deplacement=true;
this.startDrag();
}
this._parent["graphMonstre"+nbMonstres].onRelease = function(){
this.deplacement=false;
this.stopDrag();
}
//Pour chaque frame du clip dupliqué du monstre
this._parent["graphMonstre"+nbMonstres].onEnterFrame = function(){
//On vérifie si l'one est en drag et si une touche directionnelle est activée
if(this.deplacement==true && Key.isDown(Key.LEFT))//Si la fléche gauche : on rotationne à gauche
this._rotation-=5;
if(this.deplacement==true && Key.isDown(Key.RIGHT))//Si la fléche droite : on rotationne à droite
this._rotation+=5;
if(this.deplacement==true && Key.isDown(Key.UP)){//Si la flèche haut, on agrandit le clip
this._xscale+=5;
this._yscale+=5;
this._x=_xmouse;
this._y=_ymouse;
}
if(this.deplacement==true && Key.isDown(Key.DOWN)){//Si la flèche bas, on rapeticie le clip
this._xscale-=5;
this._yscale-=5;
this._x=_xmouse;
this._y=_ymouse;
}
}
nbMonstres++;//on indique que l'on a rajouté un monstre
}
}
//fonction d'initialisation
function init(){
//on initialise les premières durée
var vitesseRetraitMonstres=vitesseRetraitMonstresMax;
var ecartApparition=ecartApparitionMax;
//On place sur la scène le clip de fond
attachMovie("fond","fond",1);
fond._x = 0;
fond._y = 0;
//On place sur la scène le clip de premier plan
attachMovie("premierPlan","premierPlan",5000);
premierPlan._x = 0;
premierPlan._y = 0;
premierPlan.onPress = function(){}//on empeche de cliquer à traver les nuages
//on place sur la scène un chmap pour afficher le score
this.createTextField("scoreTexte",5003,20,20,20,20);
scoreTexte.text="123";
scoreTexte.variable="score";
scoreTexte.textColor = 0x000000;
scoreTexte.background=true;
//Selon la version on appelle l'une ou l'autre méthode
if(version=="joueur")
nouveauMonstre();
else
admin();
}
init();
stop();
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.