forked from: forked from: Airplanes

by raa
♥0 | Line 357 | Modified 2016-01-08 11:14:15 | 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/if7k
 */

// forked from Kerolos.Hany's forked from: Airplanes
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.*;
    
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // 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 sc:SoundChannel = new SoundChannel();
var sc2:SoundChannel = new SoundChannel();
var sounds:Object = {};
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.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("plane.png", "enemy.png", "explode.png"), function():void
{
   ImagesLibrary.trace("Controls: Movement - Keyboard Arrows, Shoot - Spacebar");
   ImagesLibrary.trace("All images loaded.");
   var startBtn:Button = new Button();
   startBtn.label = "Start";
   startBtn.x = stage.stageWidth/2 - startBtn.width/2;
   startBtn.y = stage.stageHeight/2- startBtn.height/2;
   
   startBtn.addEventListener(MouseEvent.CLICK, function():void
   {
     removeChild(startBtn);  
    sc2 =  sounds["airplane1"].play();
    sc2.addEventListener(Event.SOUND_COMPLETE, function():void
    {
        sc2 = sounds["airplane2"].play(0, 999);
        sc2.addEventListener(Event.SOUND_COMPLETE, function():void
        {
            sc2 = sounds["airplane2"].play(0, 999);
        });
    });

     //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.round(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(startBtn);
});

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 t:Tween = new Tween(explode, "alpha", Back.easeOut, .8, 0, 30, false);
     t.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))
{
   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.load(new URLRequest("http://angelhdz.com/Trace.swf"), new LoaderContext(true));
           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();
                       }
                   });
                }
           });
    }
}