Advertisement
Guest User

Code

a guest
Oct 26th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import flash.display.MovieClip;
  2. import flash.events.Event;
  3. import flash.geom.Point;
  4.  
  5. // DEBUG
  6. // =====
  7. import utils.debug.Stats;
  8. addChild(new Stats());
  9.  
  10. // INTIALISATION
  11. // Constante à multiplier à une valeur en radian pour la transformer en degrés
  12. const RAD2DEG:Number = 180 / Math.PI;
  13. const COLORS:Vector.<int> = new <int>[0x009900, 0xFF9900, 0x6699FF];
  14.  
  15. // Constante min et max pour random sur la vitesse
  16. const SPEED_MIN:Number = 2;
  17. const SPEED_MAX:Number = 5;
  18. const SPEED_TIR:int = 5;
  19.  
  20. // Tableau vector de vélocités correspondants aux Enemy
  21. var enemyVelocity:Vector.<Point> = new Vector.<Point>();
  22.  
  23. // Tableau vector de vélocités correspondants aux Shoot
  24. var shootVelocity:Vector.<Point> = new Vector.<Point>();
  25.  
  26.  
  27. // Constante pour le nombre d'énemis
  28. const ENEMIES_NUM:int = 100;
  29. // Tableau vector pour stocker les Enemy
  30. var enemies:Vector.<Enemy> = new Vector.<Enemy>();
  31. // Tableau vector pour stocker les Shoot
  32. var shoot:Vector.<Shoot> = new Vector.<Shoot>();
  33. // Tableau vector pour stocker les Explosions
  34. var explosion:Vector.<Explosion> = new Vector.<Explosion>();
  35. // Filtre
  36. var myColor:ColorTransform = new ColorTransform();
  37. // Déclare une variable du type player
  38. var player:Player;
  39. // Déclare une variable du type shield
  40. var shield:Shield;
  41.  
  42.  
  43. var score=0;
  44.  
  45. // Initialisation du Hud
  46. const HUD_TEXT : String = "SCORE : ";
  47. const SCORE_DEFAULT : uint = 0;
  48.  
  49. // création du bouclier
  50. // affiche le bouclier dans mcGame
  51. function createShield (): Shield {
  52.     // déclaration d'une variable locale à la fonction pour stocker une référence au movieclip Shield créé
  53.     var lShield:Shield= new Shield();
  54.     // on ajoute le shield créé au mcGame
  55.     mcGame.addChild(lShield);
  56.     return lShield;
  57. }
  58.  
  59. // création du player
  60. // crée le movieclip player, l'ajoute au mcGame, et renvoie (return)
  61. function createPlayer (pX:Number, pY:Number): Player {
  62.     // déclaration d'une variable locale à la fonction pour stocker une référence au movieclip Player créé
  63.     var lPlayer:Player= new Player();
  64.     lPlayer.x = pX;
  65.     lPlayer.y = pY;
  66.     // le Player possède un movieclip de nom d'occurrence mcEffect (regarder dans la bibliothèque)
  67.     // qui servira de point d'émission du Shoot
  68.     lPlayer.mcEffect.visible = false;
  69.     // on ajoute le player créé au mcGame
  70.     mcGame.addChild(lPlayer);
  71.     shield.mcEffect.visible = false;
  72.     // on renvoie la référence au movieclip player créé
  73.     return lPlayer;
  74. }
  75.  
  76. function createEnemies(pTarget:MovieClip, pNum: int = ENEMIES_NUM):void {
  77.     // Déclare une variable locale à la fonction, du type Enemy.
  78.     // On la déclare en dehors de la boucle for pour des raisons de performances
  79.     var lEnemy:Enemy;
  80.     var lSpeed:Number;
  81.     var lVelocity:Point = new Point();
  82.    
  83.     // on créé une boucle qui va crééer pNum Enemy
  84.     for (var i:int = 0; i < pNum; i++) {
  85.         lEnemy = new Enemy();
  86.         lEnemy.x = Math.random() * stage.stageWidth - stage.stageWidth/2;
  87.         lEnemy.y = Math.random() * stage.stageHeight - stage.stageHeight/2;
  88.         if(Math.abs(lEnemy.x)<player.width){
  89.             lEnemy.x+=Math.abs(lEnemy.x-player.width);
  90.         }
  91.         if(Math.abs(lEnemy.y)<player.height){
  92.             lEnemy.y+=Math.abs(lEnemy.y-player.height);
  93.         }
  94.         lEnemy.scaleX = Math.random() < 0.5 ? -1 : 1;
  95.         lEnemy.scaleY = Math.random() < 0.5 ? -1 : 1;
  96.        
  97.         lSpeed = Math.floor((SPEED_MIN + Math.random() * (SPEED_MAX - SPEED_MIN))*10)/10;
  98.         lVelocity = new Point(lSpeed, lSpeed);
  99.         // on stock la vélocité de l'ennemi dans le tableau vector enemyVelocity.
  100.         enemyVelocity.push(lVelocity);
  101.         trace(enemyVelocity);
  102.         // on paramètre notre filtre
  103.         myColor.color = COLORS[Math.floor(Math.random() * COLORS.length)];
  104.         // on applique le filtre sur le movielipc mcColor contenu dans mcEnemy contenu dans le movieclip référencé dans la variable lEnemy
  105.         lEnemy.mcEnemy.mcColor.transform.colorTransform = myColor;
  106.        
  107.         /*CACHE AS BITMAP transforme les movieclip qui ne contiennent pas d'animation en simple bitmap
  108.            Gros gain de performance.
  109.            ATTENTION, ne pas appliquer sur les movieclips qui possèdent une animation (à l'intérieur) et n'appliquer
  110.            que si ces movieclips ne font que des translations ou sont fixes (ne pas appliquer si le movieclip change de taille
  111.            ou effectue une rotation.. Nous reviendrons sur cette optimisation plus tard en cours de flash ide.*/
  112.         lEnemy.cacheAsBitmap = true;
  113.        
  114.         // on addChild l'Enemy créé au MovieClip référencé dans pTarget.
  115.         pTarget.addChild(lEnemy);
  116.         // on stock la référence à l'Enemy dans le tableau d'ennemis
  117.         enemies.push(lEnemy);
  118.     }
  119. }
  120.  
  121. // création du hud
  122. // addChild directement sur le stage, ainsi le hud sera toujous au dessus du mcGame (et de ses enfants)
  123. function createHud (pScore:uint=SCORE_DEFAULT) : void {
  124.     // déclaration d'une variable locale à la fonction pour stocker une référence au movieclip Hud créé
  125.     var lHud:Hud = new Hud();
  126.     // addChild sur le stage
  127.     addChild(lHud);
  128.     // Dans le champs texte de nom d'occurrence txtScore, on utilise la fonction .text pour affecter le score au champs
  129.     lHud.txtScore.text = HUD_TEXT + pScore;
  130. }
  131.  
  132.  
  133. //
  134. // CONTRUCTION DU JEU
  135. shield = createShield();
  136. player = createPlayer(0,0);
  137. createEnemies(mcGame);
  138. createHud(SCORE_DEFAULT);
  139.  
  140.  
  141.  
  142. //
  143. // ACTION
  144. function doActionEnemies():void {
  145.     var lEnemy:Enemy; // variable locale à la fonction, type Enemy
  146.     var lLength:int = enemies.length; // On compte le nombre d'Enemy dans le tableau d'Enemy pour le parcourir
  147.    
  148.     // La boucle va parcourir le tableau, récupérer les références au Enemy
  149.     for (var i:int = 0; i < lLength; i++) {
  150.         lEnemy = enemies[i];
  151.         // on affecte les ccordonnées en fonction du scale et de la vitesse stockée dans tableau vector enemyVelocity
  152.         lEnemy.x += lEnemy.scaleX * enemyVelocity[i].x;
  153.         lEnemy.y += lEnemy.scaleY * enemyVelocity[i].y;
  154.        
  155.         // Teste la sortie de la scène, si Enemy sort, on inverse son scale en x
  156.         if (lEnemy.x > stage.stageWidth/2) lEnemy.scaleX = -1;
  157.         else if (lEnemy.x < -stage.stageWidth/2) lEnemy.scaleX = 1;
  158.         // Teste la sortie de la scène, si Enemy sort, on inverse son scale en y
  159.         if (lEnemy.y > stage.stageHeight/2) lEnemy.scaleY = -1;
  160.         else if (lEnemy.y < -stage.stageHeight/2) lEnemy.scaleY = 1;
  161.     }
  162. }
  163.  
  164.  
  165. // Orientation du player en fonction de la position de la souris.
  166. function doActionPlayer (): void {
  167.     // mcGame.mouseX et mcGame.mouseY donnent les coordonnées de la souris par rapport ici au mcGame.
  168.     player.rotation=Math.atan2(mcGame.mouseY - player.y, mcGame.mouseX - player.x) * RAD2DEG;
  169. }
  170.  
  171.  
  172. function creatShoot (pEvent:MouseEvent): void {
  173.    
  174.     //Initialisation Variable Local
  175.    
  176.     var lShoot:Shoot= new Shoot();
  177.     var lMcEffect:MovieClip=player.mcEffect;
  178.     var lPositionCanon:Point= new Point(player.x,player.y);
  179.     var lVelocity:Point= new Point();
  180.     var lSpeedX:Number;
  181.     var lSpeedY:Number;
  182.  
  183.     //Calcule position/vecteur
  184.    
  185.     lPositionCanon = mcGame.globalToLocal(lMcEffect.localToGlobal(lPositionCanon));
  186.     lShoot.x=lPositionCanon.x;
  187.     lShoot.y=lPositionCanon.y;
  188.    
  189.     lSpeedX=SPEED_TIR * Math.cos(player.rotation/RAD2DEG);
  190.     lSpeedY=SPEED_TIR * Math.sin(player.rotation/RAD2DEG);
  191.    
  192.     lVelocity.setTo(lSpeedX,lSpeedY);
  193.    
  194.     //Incrémentation tableau Velocity/Shoot
  195.    
  196.     shoot.push(lShoot);
  197.     shootVelocity.push(lVelocity);
  198.     //Affichage
  199.    
  200.     mcGame.addChild(lShoot);
  201.    
  202. }
  203.  
  204.  
  205.  
  206. function doActionShoots ():void{
  207.     //Initialisation Variable Local
  208.     var i:int;
  209.     var j:int;
  210.     var lMcExplosion:Explosion=new Explosion();
  211.     var lEnemy:Enemy;
  212.     var lPoint:Point=new Point();
  213.    
  214.    
  215.     for(i=0;i<enemies.length;i++){
  216.         lEnemy=enemies[i];
  217.         lPoint.setTo(lEnemy.x,lEnemy.y);
  218.         lPoint=mcGame.localToGlobal(lPoint);
  219.         if(shield.mcEffect.hitTestPoint(lPoint.x,lPoint.y,true)){
  220.             shield.mcContent.play();
  221.             lEnemy.scaleY *= -1;
  222.             lEnemy.scaleX *= -1;
  223.            
  224.            
  225.         }
  226.     }
  227.    
  228.     for(i=0;i<shoot.length;i++){
  229.         for(j=0;j<enemies.length;j++){
  230.             if(shoot[i].hitTestObject(enemies[j])){
  231.                 score=score+100;
  232.                 removeChild(getChildAt(numChildren-1));
  233.                 createHud(score);
  234.    
  235.                 lMcExplosion.x=enemies[j].x;
  236.                 lMcExplosion.y=enemies[j].y;
  237.                 mcGame.addChild(lMcExplosion);
  238.                 explosion.push(lMcExplosion);
  239.                
  240.                 shoot[i].parent.removeChild(shoot[i]);
  241.                 shoot.splice(i,1);
  242.                 shootVelocity.splice(i,1);
  243.                
  244.                 enemies[j].parent.removeChild(enemies[j]);
  245.                 enemies.splice(j,1);
  246.                 break;
  247.             }
  248.         }
  249.     }
  250.    
  251.    
  252.     for(i=0;i<shoot.length;i++){
  253.             shoot[i].x+=shootVelocity[i].x;
  254.             shoot[i].y+=shootVelocity[i].y;
  255.     }
  256.    
  257.     for(i=0;i<explosion.length;i++){
  258.         if(explosion[i].currentFrame == (explosion[i].totalFrames)-1){
  259.             explosion[i].parent.removeChild(explosion[i]);
  260.             explosion.splice(i,1);
  261.         }
  262.     }
  263. }
  264.  
  265.  
  266. function destroyShoot():void{
  267.     var i:int;
  268.     for(i=0;i<shoot.length;i++){
  269.         if ((shoot[i].x < -stage.stageWidth/2) || (shoot[i].x > stage.stageWidth/2) || (shoot[i].y > stage.stageHeight/2) || (shoot[i].y < -stage.stageHeight/2)){
  270.                 shoot[i].parent.removeChild(shoot[i]);
  271.                 shoot.splice(i,1);
  272.                 shootVelocity.splice(i,1);
  273.         }
  274.     }
  275. }
  276.  
  277.  
  278. // GameLoop appelée à chaque frame
  279. // C'est notre chef d'orchestre.
  280. // Cette fonction étant appelée à chaque frame, elle appelle à son tour doActionPlayer et doActionEnemies
  281. function gameLoop(pEvent:Event):void {
  282.     if(score<ENEMIES_NUM*100 || explosion.length!=0){
  283.         doActionPlayer();
  284.         doActionEnemies();
  285.         doActionShoots();
  286.         destroyShoot();
  287.     }else{
  288.         removeChild(getChildAt(numChildren-1));
  289.         removeEventListener(Event.ENTER_FRAME, gameLoop);
  290.         removeEventListener(MouseEvent.CLICK, creatShoot);
  291.         for(var i:int=0;i<shoot.length;i++){
  292.             shoot[i].parent.removeChild(shoot[i]);
  293.         }
  294.         shoot.splice(0,shoot.length);
  295.         shootVelocity.splice(0,shootVelocity.length);
  296.         var mcWinScreen:WinScreen=new WinScreen();
  297.         addChild(mcWinScreen);
  298.         mcWinScreen.txtScore.text=HUD_TEXT + score;
  299.     }
  300.    
  301. }
  302.  
  303. // Ecouteur ajouté à la scène, écoute l'événement Event.ENTER_FRAME et exécute la fonction gameLoop à la récecption de cet événement
  304. // à chaque frame donc...
  305. addEventListener(Event.ENTER_FRAME, gameLoop);
  306. addEventListener(MouseEvent.CLICK, creatShoot);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement