Accueil > > > MOTEUR SHOOT'EM UP SIMPLE ET PARAMETRABLE
MOTEUR SHOOT'EM UP SIMPLE ET PARAMETRABLE
Information sur la source
Description
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
- //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();
//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();
Historique
- 14 juin 2006 17:36:01 :
- Euh pti bud de profondeur ^^
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
shoot em up complet [ par wolfmike ]
salut a tous... j ai un gro probleme... je cherche une source d un shoot em up complet!!!!!(j ai bien di complet) je veu pa d un truc trop pourri...ce
POINTEUR COMPLEXE [ par PEHA ]
Bon je suis nouveau sur le site, j'ai jamais voulu poser de question sur le flash et toujours voulu tout apprendre tout seul, mais là vraiment je bloq
arme pour shoot'em up [ par stown ]
salut!voila je veu faire un shoot'em up, le probléme c'est l'arme! je ne vois vraiment pas comment faire pour qu'elle "suive" le curseur....je sa
Le shoot'em up de tom [ par makikofsky ]
C encore moi ;)allez voir sur mon site j'ai légèrement modifié la base gracieusement offerte par TOM (il est fort l'enfoiré! ;)C'est sur la page d'acc
moteur de jeu [ par neo33 ]
ben voila j'ai les base avec flash et jaimerai faire un jeude plateforme style mariosi kelkun pouvait me dire ou faire un tutuo sur comment faire un m
mode tir d'un jeu de shoot'm up [ par ministeeve ]
bonjourje suis en train de cree un jeu shoot'm up, mais se pose a moi un probleme, je n'ai qu'un seul tir possible a la foi,une foi le tir disparu de
Chargement d'une carte externe [ par neovalpox ]
Bonjours,Alors voila, j'ai repris la source de Pegasus concernant le moteur de jeu avec vue 3/4 à la zelda, et j'aimerai faire en sorte que la carte n
Combo dans un jeu de beat em up [ par coolninja19 ]
Salut tout le monde je vrux faire un jeux de beat em all et jaimerais savoir comment faire des combo en faite compter combien de fois de suite le hero
moteur de jeu multijoueurs [ par nicoool18 ]
Bonjour,Je vien de commencer a programmer un jeu, et j'ai un probleme. Sur un niveau, il y a plusieurs personnages (c'est un jeu multijoueurs) (le nom
Probleme de tete de lecture [ par nicoool18 ]
Bonjour a tous !Je suis en train de faire un jeu en flash. c'est un jeu de plate forme plutot classique, le personnage tien une tronçonneuse dans sa m
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|