forked from: Airplanes

by raa
Sample code. Will be improved and arranged.
You can use the code. 
You can use the sounds and the music, ONLY if you load them
directly from my site with the links used in the code. 
I own the sounds and the music.

Enjoy :)
Angel Hdz 2015
♥0 | Line 406 | Modified 2016-01-08 11:15:33 | MIT License
play

ActionScript3 source code

/**
 * Copyright raa ( http://wonderfl.net/user/raa )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/44sE
 */

// forked from angelhdz12's Airplanes
/*
Sample code. Will be improved and arranged.
You can use the code. 
You can use the sounds and the music, ONLY if you load them
directly from my site with the links used in the code. 
I own the sounds and the music.

Enjoy :)
Angel Hdz 2015
*/

package {
    import flash.text.TextField;
    import flash.display.AVM1Movie;
    import flash.media.SoundChannel;
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.net.URLRequest;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    import flash.display.Loader;
    import flash.display.Bitmap;
    import flash.display.Stage;
    import flash.utils.setTimeout;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import fl.transitions.easing.*;
    import flash.utils.setInterval;
    
    public class FlashTest2 extends Sprite {
        public function FlashTest2() {
            // write as3 code here..
var speed:Number = 5;
var delay:int = 3000; //3 seconds)
var timer:Timer = new Timer(delay);
var player:Object = {};
var copy:Bitmap;
var keys:Object = {};
var canShoot:Boolean = true;
var stg:* = this;
var scrollSpeed:Number = 5;
var actionBtn :Button;
var sc:SoundChannel = new SoundChannel();
var sc2:SoundChannel = new SoundChannel();
var sounds:Object = {};
var interval:int;
sounds["airplane1"] = new Sound();
sounds["airplane2"] = new Sound();
sounds["music"] = new Sound();
sounds["gameover"] = new Sound();
sounds["gun"] = new Sound();
sounds["explode"] = new Sound();
sounds.play = function(snd:String):void
{
  this[snd].play();  
};


sounds["airplane1"].load(new URLRequest("http://angelhdz.com/planes/airplane1.mp3"));
sounds["airplane2"].load(new URLRequest("http://angelhdz.com/planes/airplane2.mp3"));
sounds["music"].load(new URLRequest("http://angelhdz.com/planes/music.mp3"));
sounds["gameover"].load(new URLRequest("http://angelhdz.com/planes/gameover.mp3"));
sounds["gun"].load(new URLRequest("http://angelhdz.com/planes/gun.mp3"));
sounds["explode"].load(new URLRequest("http://angelhdz.com/planes/explode.mp3"));
sc = sounds["music"].play(0,999);
sc.addEventListener(Event.SOUND_COMPLETE, function():void
{
 sc = sounds["music"].play(0,999); 
});


player.shield = false;
player.speed = 5;

   stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void
    {
      keys[e.keyCode] = true;
    });
    
    stage.addEventListener(KeyboardEvent.KEY_UP, function(e:KeyboardEvent):void
    {
      keys[e.keyCode] = false;
    });

ImagesLibrary.loadImages(this, new Array("shield.png", "bg.png", "plane.png", "enemy.png", "explode.png"), function():void
{
   ImagesLibrary.trace("Controls: Movement - Keyboard Arrows, Shoot - Spacebar");
   ImagesLibrary.trace("All images loaded.");
  actionBtn = new Button();
   var bg:Sprite = new Sprite();
   bg.addChild(new Bitmap(ImagesLibrary.getImage("bg").bitmapData));
   bg.height = stage.stageHeight;
   bg.addEventListener(Event.ENTER_FRAME, function():void
   {
     bg.x -= scrollSpeed;  
     if(bg.x + bg.width < stage.stageWidth+88)
     {
         bg.x = 0;
     }
   });
   addChild(bg);
   actionBtn.label = "Start";
   actionBtn.x = stage.stageWidth/2 - actionBtn.width/2;
   actionBtn.y = stage.stageHeight/2- actionBtn.height/2;
   
   actionBtn.addEventListener(MouseEvent.CLICK, startGame);
   function startGame(e:MouseEvent = null):void
 {
    removeChild(Button(e.currentTarget));
  interval = setInterval(function():void
   {
       var shield:Sprite = new Sprite();
       shield.addChild(new Bitmap(ImagesLibrary.getImage("shield").bitmapData));
       var random:Number = Math.floor(Math.random() * (stage.stageHeight - shield.height)) + shield.height;
       shield.y = random;
       shield.x = stage.stageWidth;
       shield.scaleX = shield.scaleY -= .8;
       shield.addEventListener(Event.ENTER_FRAME, shieldOn);
       addChild(shield);
   }, 30000);

     //Spawn enemy
    timer.start();
    timer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void
    {
        var enemy:Sprite = new Sprite();
        enemy.name = "enemy"+e.target.currentCount;
        copy = new Bitmap(ImagesLibrary.getImage("enemy").bitmapData); 
        enemy.scaleX -= .8;
        enemy.scaleY -= .8;
        var random:Number = Math.floor(Math.random() * (stage.stageHeight - enemy.height)) + enemy.height;
        enemy.addChild(copy);
        enemy.y = random;
        enemy.addEventListener(Event.ENTER_FRAME, move);
        addChild(enemy );
    });
    //Add player
    player.clip = new Sprite();
    copy = new Bitmap(ImagesLibrary.getImage("plane").bitmapData); 

    player.clip.addChild(copy);
    player.clip.scaleX -= .8;
    player.clip.scaleY -= .8;
    player.clip.x = 100; 
    player.clip.y = 100;

player.clip.addEventListener(Event.ENTER_FRAME, collision);
  addChild(player.clip); 
   };
   addChild(actionBtn);
});

function restart(e:MouseEvent):void
{
    
}


function shieldOn(e:Event):void
{
    var target:Sprite = Sprite(e.currentTarget);
    
    target.x -= 5;
    
    if(target.hitTestObject(player.clip))
    {
      target.removeEventListener(Event.ENTER_FRAME, shieldOn);
       removeChild(target);
       player.shield = true;
       setTimeout(function():void
       {
           player.shield = false;
           player.clip.alpha = 1;
       }, 10000)
       player.clip.alpha = 0.2;
    }
};

function collision(e:Event):void
{
       if(keys[Keyboard.LEFT])
      {
          player.clip.x -= player.speed;
      }
 if(keys[Keyboard.RIGHT])
      {
          player.clip.x += player.speed;
      }
       if(keys[Keyboard.UP])
      {
          player.clip.y -= player.speed;
      }
      if(keys[Keyboard.DOWN])
      {
          player.clip.y += player.speed;
      }
      
      if(keys[Keyboard.SPACE])
      {
          if(canShoot)
          {
              var bullet:Bullet = new Bullet(stg, 10);
              bullet.x = player.clip.x + (player.clip.width/2);
              bullet.y = player.clip.y + (player.clip.height - 10);
              addChild(bullet);
              canShoot = false;
              setTimeout(function():void
              {
                  canShoot = true;
              }, 500);
            sounds["gun"].play(); 
          }
      }
}

function explotion(target:*):void
{
    var explode:Sprite = new Sprite();
     explode.addChild(new Bitmap(ImagesLibrary.getImage("explode").bitmapData));
    explode.width = explode.height = 80;
    explode.x = (target.x + target.width/2) - explode.width/2;
    explode.y = (target.y + target.height/2) - explode.height/2;
    addChild(explode);
     var t1:Tween = new Tween(explode, "alpha", Back.easeOut, .8, 0, 30, false);
    var t2:Tween = new Tween(explode, "scaleX", Back.easeOut, 0, .5, 30, false);
     var t3:Tween = new Tween(explode, "scaleY", Back.easeOut, 0, .5, 30, false);
     t2.addEventListener(TweenEvent.MOTION_CHANGE, function(e:TweenEvent):void
     {
        e.target.obj.x = (target.x + target.width/2) - e.target.obj.width/2;
        e.target.obj.y = (target.y + target.height/2) -  e.target.obj.height/2;
     }); 

     t1.addEventListener(TweenEvent.MOTION_FINISH, function(e:TweenEvent):void
     {
       removeChild(e.target.obj);  
     }); 
   sounds["explode"].play();
}


function destroy(target:*):void
{
     target.removeEventListener(Event.ENTER_FRAME, move);
    removeChild(target);
}


function move(e:Event):void
{
    var target:Sprite = Sprite(e.currentTarget);
target.x += speed;
if(target.x > stage.stageWidth)
{
   destroy(target);   
}
if(target.hitTestObject(player.clip))
{
   if(!player.shield)
   {
       var msg:TextField = new TextField();
       msg.textColor = 0xff0000;
       msg.htmlText = "<font size='40'>GAME OVER</font>";
       msg.width = msg.textWidth;
          msg.x = stage.stageWidth/2 - msg.width/2;
       msg.y = stage.stageHeight/2 - msg.height/2;
    
       addChild(msg);
        explotion(target);
        explotion(player.clip);
        destroy(target);
        timer.stop();
        removeChild(player.clip);
        ImagesLibrary.trace("GAME OVER");
        sc.stop();
        sounds["gameover"].play();
        sc2.stop();
        player.clip.removeEventListener(Event.ENTER_FRAME, collision);
   }
}

      for(var i:int = 0; i < numChildren; i++)
           {
              if(getChildAt(i) is Bullet)
              {
               if(getChildAt(i).hitTestObject(Sprite(e.currentTarget)))
               {
                  explotion(target);
                  destroy(target);  
               }
              }
           }
}
        }
    }
}



//Bullet
import flash.display.Sprite;
import flash.events.Event;


class Bullet extends Sprite
{
   private var speed:Number;
   private var stg:*;
   
    public function Bullet(stg:*, speed:Number)
    {
        this.speed = speed;
        this.stg = stg;
        graphics.beginFill(0x000000);
        graphics.drawRect(0, 0, 15 , 3);
        addEventListener(Event.ENTER_FRAME, move);
    }
    
    public function move(e:Event):void
    {
      e.currentTarget.x -= speed;  
      
        if(e.currentTarget.x < 0)
        {
           var target:Bullet = Bullet(e.currentTarget);
           target.removeEventListener(Event.ENTER_FRAME, move);
           stg.removeChild(this);
          }
    };
}


import flash.text.TextField;
import flash.text.TextFormat;
import flash.display.Sprite;
import flash.display.SimpleButton;

class Button extends SimpleButton
{
    private var up:Sprite;
    private var over:Sprite;
    private var down:Sprite;
   private var hitTest:Sprite;
   private var formato:TextFormat = new TextFormat();

    public function Button()
    {
        up = new Sprite();
        up.graphics.lineStyle(1, 0x666666);
         up.graphics.beginFill(0xcccccc);
         up.graphics.drawRect(0, 0, 100, 30);
        
        over = new Sprite();
       over.graphics.lineStyle(1, 0x00ccff);
         over.graphics.beginFill(0xcccccc);
         over.graphics.drawRect(0, 0, 100, 30);
        
        down = new Sprite();
       down.graphics.lineStyle(1, 0x00ccff);
         down.graphics.beginFill(0x00ccff);
         down.graphics.drawRect(0, 0, 100, 30);
         upState = up;
         overState = over;
         downState = down;
         hitTestState = up;
         
         formato.align = "center";
         up.addChild(crearLabel());
         over.addChild(crearLabel());
         down.addChild(crearLabel());
    }  
    
    private function crearLabel():TextField
    {
        var label:TextField = new TextField();  
        label.defaultTextFormat = formato;
        label.width = 100;
        label.height  = 20;
        label.text = "Label";
        label.y = 15 - label.height /2;
        return label;
    }
    
    public function set label(_label:String):void
    {
        var states:Array = [upState, overState, downState];
        
        for each(var i:Sprite in states)
        {
            TextField(i.getChildAt(0)).text = _label;
        }
    }
}






//ImageLibrary class
import flash.display.Sprite;
  //Load trace engine
    import flash.display.Loader;
    import flash.events.Event;
    import flash.system.Security;
    import flash.system.LoaderContext;
    import flash.display.LoaderInfo;
    import flash.net.URLRequest;

import flash.display.MovieClip;
import flash.display.Stage;
import flash.display.Bitmap;
import flash.events.EventDispatcher;

class ImagesLibrary extends MovieClip
{
    public static var images:Array;
    public static var loadedImages:Object;
    public static var trace:Function;
    public static const IMAGES_COMPLETE:String = "imagesComplete";
    public static var canvas:Sprite;
    public static var callBack:Function;
    public static var count:int;
    
    public static function getImage(img:String):Bitmap
    {
        return ImagesLibrary.loadedImages[img];
    }
    
    public static function trim(extension:String):String
    {
       var extensions:Array = [".jpg", ".gif", ".png", ".bmp"];
       for(var i:* in extensions)
       {
           if(extension.indexOf( extensions[i] ) > -1)
           {
               return extension.split(extensions[i]).join("");
           }
       }
        return "";
    }


    public static function loadImages(arg1:Sprite, arg2:Array, arg3:Function):void
    {
              ImagesLibrary.canvas = arg1;  
              ImagesLibrary.images = arg2;
               ImagesLibrary.callBack = arg3;
              var THIS:Sprite = ImagesLibrary as Sprite;
           var ld:Loader = new Loader();
           Security.allowDomain("*");
           ld.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
           {
               var info:LoaderInfo = e.target as LoaderInfo;
               var swf:* = info.loader;
             
               swf.content.init(ImagesLibrary.canvas.stage);
               ImagesLibrary.trace = swf.content.trace;
                    ImagesLibrary.loadedImages = {};
                for(var i:* in ImagesLibrary.images)
                {
                    var fileName:String = ImagesLibrary.images[i];
                    
                    var l:Loader = new Loader();
                    l.name = ImagesLibrary.trim(fileName);
                    l.load(new URLRequest("http://angelhdz.com/planes/"+fileName));
                   l.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
                   {
                       var img:Bitmap = e.target.content as Bitmap;
                       ImagesLibrary.loadedImages[e.target.loader.name] = img;
                       ImagesLibrary.count++;
                       if(ImagesLibrary.count == ImagesLibrary.images.length)
                       {
                          ImagesLibrary.callBack();
                       }
                   });
                }
           });
    }
}