flash on 2009-6-17

by zsp
------------------------------------------------------------
♥0 | Line 174 | Modified 2009-06-17 18:33:58 | MIT License
play

ActionScript3 source code

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

//------------------------------------------------------------
package {
    import flash.display.Sprite;
    import flash.events.Event;
    //import flash.display.Bitmap;

    [ SWF( width = "465" , height = "465" , backgroundColor = "0x000000" , frameRate = "60" ) ]  
    public class FlashTest extends Sprite {
        private var game:Game;
        public function FlashTest() {
            //addChild(new Bitmap(screen));
            main = this;
            Render.setScreen(this);
            game = new Game01();
            addEventListener(Event.ENTER_FRAME,onEnterFrame); 
        }

        public function onEnterFrame(e:Event):void{
            game.mainloop();
        }
    }
}

import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;

const WND_W:int = 465;
const WND_H:int = 465;
var screen:BitmapData = new BitmapData(465,465,false,0x00000000); 
var main:Sprite;
class Game{
    public function Game(){ setup();}
    public function setup():void{}
    public function mainloop():void{}
}

/*
class Game01 extends Game{
    override public function setup():void{}
    override public function mainloop():void{}   
}
*/
//------------------------------------------------------------
class Game01 extends Game{
    private var id01:int;
    private var t:int;
    private var neko:int;
    
    override public function setup():void{
        Resource.Initialize();
        
        var id:int = Render.resisterBitmap(Resource.circle01);
        Render.draw(id,100,10);
        
        id01 = Render.resisterRotatedBitmap(Resource.arrow01,40);
        
        neko = Render.resisterBitmap(Resource.neko01);
        
    }
    override public function mainloop():void{
        t++;
        Render.drawBegin();
        Render.clear();
        
        for(var i:int = 0; i<20; i++){
            var r:Number = i*Math.PI*2/20;
            var x:int = 100+Math.cos(r)*60;
            var y:int = 100+Math.sin(r)*60;
            Render.draw(id01,x,y,r);
        }
        
        Render.draw(neko,100,100);
        Render.drawEnd();
    }
}

/*

**
 * Base64化された画像データを表示可能な形式に変換するクラス
 * 
 * 使い方 :
 * var data:String = "Base64化された画像データ";
 * var display:DisplayObjectContainer = Base64ImageLoader.load(data);
 * if (display != null)
 *     addChild(display);

class Base64ImageLoader
{
    import flash.display.DisplayObjectContainer;
    import flash.display.Loader;
    import flash.utils.ByteArray;
    import mx.utils.Base64Decoder;
    static public function load(data:String):DisplayObjectContainer
    {
        var byteArray:ByteArray;
        var base64Decoder:Base64Decoder;
        var loader:Loader;
        
        base64Decoder = new Base64Decoder();
        base64Decoder.decode(data);
        
        try {
            byteArray = base64Decoder.toByteArray();
            byteArray.position = 0;
        } catch (e:Error) {
            return null;
        }
        
        loader = new Loader();
        loader.loadBytes(byteArray);
        
        return loader;
    }*/
    
import flash.display.DisplayObjectContainer;

class Resource{
    public static var arrow01:BitmapData;
    public static var circle01:BitmapData;
    public static var neko01:BitmapData;
    public static var usa01:BitmapData;


    private static const IMAGE:String =
    'R0lGODlhJAAkAIgAAAAAAP99fSH5BAEAAAAALAAAAAAkACQAAAJ1hH+hyO1vQoJASepuhVrjCTLe'+
    '9oWkiJYRMp5RS41yqrruXK/szue3aat5Oj3fzVI0BpNKGDPnpPmiDSpH2MQarc8PF6j66rYl8cNq'+
    '5rSQyoTlvajEyeFsvcmuztvLNIY4xhcCKDh44RfjFli4cbjEx7bHyFgAADs=';

    private static const IMAGE2:String =     
    'R0lGODlhJAAkAIgAAAAAAAD/ACH5BAEAAAAALAAAAAAkACQAAAJthI+py+0Po5Qh1pmuCxqD2ilX'+
    'SH2bQUJaaqJe+3GyjLCNfWM4s9eva/HlDj2gcdEpwpYioerHHL6UymYQlEm2qlWihzPpOm/i7Oxc'+
    'rhXT3TIXSuOBoV4kPcO7O+dROHCk5zUHGIiSlFaYqFhYAAA7';
    
    public static function Initialize():void{
        //arrow01
            var sp:Sprite = new Sprite();
            sp.graphics.lineStyle(1,0x00FF00);
            sp.graphics.moveTo(3,0);
            sp.graphics.lineTo(-3,-3);
            sp.graphics.lineTo(-3,3);
            sp.graphics.lineTo(3,0);
            
            var m:Matrix = new Matrix();
            m.translate(5,5);
            
            arrow01 = new BitmapData(10,10,true,0x00FFFFFF);
            arrow01.draw(sp, m);
               
        //circle01       
            var sp2:Sprite = new Sprite();
            sp2.graphics.lineStyle(1,0xFF0000);
            sp2.graphics.drawCircle(5,5,4);
            circle01 = new BitmapData(10,10,true,0x0);
            circle01.draw(sp2);
            
            
        //image     
            var img:DisplayObjectContainer = Base64ImageLoader.load(IMAGE2);
            if (img != null)
            {
                var sprite:Sprite = new Sprite();//main.addChild(new Sprite) as Sprite;
                sprite.addChild(img);
                neko01 = new BitmapData(36,36,true,0x0);
                neko01.draw(sprite);

                main.addChild(new Bitmap(neko01));
            }
/*
            var img2:DisplayObjectContainer = Base64ImageLoader.load(IMAGE2);
            if (img2!= null)
            {
                var sprite2:Sprite = addChild(new Sprite) as Sprite;
                sprite2.addChild(img2);
                sprite2.x = 100;
                sprite2.y = 100;
            }*/
   }
}

class Base64ImageLoader
{
    import flash.display.DisplayObjectContainer;
    import flash.display.Loader;
    import flash.utils.ByteArray;
    import mx.utils.Base64Decoder;
    static public function load(data:String):DisplayObjectContainer
    {
        var byteArray:ByteArray;
        var base64Decoder:Base64Decoder;
        var loader:Loader;
        
        base64Decoder = new Base64Decoder();
        base64Decoder.decode(data);
        
        try {
            byteArray = base64Decoder.toByteArray();
            byteArray.position = 0;
        } catch (e:Error) {
            return null;
        }
        
        loader = new Loader();
        loader.loadBytes(byteArray);
        
        return loader;
    }
}
    
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix; 

 
class Render{
    public static var screen: BitmapData = new BitmapData(465,465,false,0x0);
    public static var ImageList:Vector.<Vector.<BitmapData>> = new Vector.<Vector.<BitmapData>>();
    
    private static var idx:int = 0;
    
    public static function setScreen(s:Sprite):void{
        s.addChild(new Bitmap(screen));
    }
    
    public static function drawBegin():void{
        screen.lock();
    }
    public static function drawEnd():void{
        screen.unlock();
    }
    
    public static function clear():void{
        screen.fillRect(screen.rect,0x000000);
    }
    
    public static function resisterBitmap(src_bmp:BitmapData):int{
        var list:Vector.<BitmapData> = new Vector.<BitmapData>();
        
        var bmp:BitmapData = new BitmapData(src_bmp.width,src_bmp.height, true, 0x0000000); 
        bmp.draw(src_bmp,null, null, null, null, true); 
        list.push(bmp);
        ImageList.push(list);
        
        idx++;
        return idx -1;
    }
    
    public static function resisterRotatedBitmap(src_bmp:BitmapData, n:int):int{
        var list:Vector.<BitmapData> = new Vector.<BitmapData>();
        var hsz:int = src_bmp.width/2;
 
        for (var i:int= 0; i<n; i++){
            var matrix:Matrix;  
            matrix = new Matrix();  
            matrix.translate( -hsz, -hsz); 
            matrix.rotate(i *2*Math.PI/ n) 
            matrix.translate( hsz,hsz); 

            var bmp:BitmapData = new BitmapData(src_bmp.width,src_bmp.height, true, 0x0000000); 
            bmp.draw(src_bmp,matrix, null, null, null, true); 
            list.push(bmp);
        }
         
        ImageList.push(list);
        idx++;
        return idx -1;
    }

    public static function draw(id:int,x:Number,y:Number, r:Number= 0):void{
        var rot_idx:int =0;
        if (r>0) rot_idx= r * ImageList[id].length/ (2*Math.PI);
     
        if ((id >= ImageList.length)||(id<0)||(rot_idx>= ImageList[id].length)||(rot_idx<0)) return;
        var img :BitmapData = ImageList[id][rot_idx];
        screen.copyPixels(img,img.rect,new Point(x-img.width/2,y-img.height/2));
    }
            
}