flash on 2010-10-11

by yukifuruyoru
♥0 | Line 258 | Modified 2010-10-12 05:19:09 | MIT License
play

ActionScript3 source code

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

package {
    [SWF(width = "465", height = "465", frameRate = "30")]
    import flash.display.Sprite;    
    import flash.display.Shape;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            var noir:Shape=new Shape;
            noir.graphics.beginFill(0xcccccc);
            noir.graphics.drawRect(0,0,465,465);
            graphics.endFill();
            addChild(noir);
            
            inittrace(stage);
            trace("trace test");
            new Main(stage);
        }
    }
}
import flash.utils.Proxy;
import flash.geom.Rectangle;
import flash.display.Bitmap;
import flash.geom.Point;
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;

class Main extends Object{
    public var stg:Stage;
    public var FRIC:Number=0.5;
    public var MAXSPD:Number=4;
    
    public var duma:uint;
    public var dumb:Number;
    
    public var key:Vector.<Boolean>;
    public var com:uint=0;
    
    public var jug:Jugador=new Jugador;
    public var animas:Vector.<Object>=Vector.<Object>([jug]);
    
    public var imagenes:Imagenes;
    public var mundo:Mundo=new Mundo();
    
    public var moni:Monitor;
    public function Main(_stg:Stage){
        trace("<Main");
        init(_stg);
        
        function init(_stg:Stage):void{
            stg=_stg;
            trace("load key");
            var kbw:KBW=new KBW(stg);key=kbw.kc;
            
            trace("load imagen");
            imagenes=new Imagenes(256,192);stg.addChildAt(imagenes,1);
            place(imagenes,120,120);
            trace("load oef");
            stg.addEventListener(Event.ENTER_FRAME,oef);
            trace("load monitor");
            moni=new Monitor();stg.addChild(moni);
        }
        trace("Main>");
    }
//-------------------------------------------------------------------------
    private function oef(...args):void{
        friction();
        //gravity
        
        keymap();
        react();
        //crash
        
        //state refresh
        posrefr();
        grarefr();
        
        moni.jugspd.text=String("spd x: "+jug.spd.x+"\nspd y: "+jug.spd.y);
        moni.jugpos.text=String("pos x: "+jug.pos.x+"\npos y: "+jug.pos.y);
    }
//-------------------------------------------------------------------------
    private function friction():void{
        duma=animas.length;
        for(var i:uint=0;i<duma;i++){
            dumb=animas[i].spd.x;
            if(dumb!=0){
                if(dumb>0){if(dumb>FRIC){animas[i].spd.x-=FRIC}else{animas[i].spd.x=0;}}
                else{if(dumb<-FRIC){animas[i].spd.x+=FRIC}else{animas[i].spd.x=0;}}
            }
        }
    }
    private function keymap():void{
        //←↑→↓z
        com=0;
        if(key[37])com+=0x000001;
        if(key[38])com+=0x000002;
        if(key[39])com+=0x000004;
        if(key[40])com+=0x000008;
        if(key[90])com+=0x000010;
    }
    private function react():void{
        if(key[37]&&key[39])com-=0x000005;
        if(key[38]&&key[40])com-=0x00000A;
        
        if(com&0x000001)jug.spd.x=-MAXSPD;
        if(com&0x000002)jug.spd.y=-1;
        if(com&0x000004)jug.spd.x=MAXSPD;
        if(com&0x000008)jug.spd.y=1;
    }
    private function starefr():void{
        
    }
    private function posrefr():void{
        for(var i:uint=0;i<duma;i++){
            animas[i].pos.x+=animas[i].spd.x;
            //animas[i].pos.y+=animas[i].spd.y;
            animas[i].pos.y=179;
        }
    }
    private function grarefr():void{
        imagenes.refr(jug.pos,mundo,animas);
    }
}
//---------------------------------------------
import flash.display.BitmapData;
class Imagenes extends Sprite{
    public var W:uint;
    public var H:uint;
    public var ventana:BitmapData;
    public var noir:BitmapData;
    public var pto0:Point=new Point(0,0);
    public var rec0:Rectangle;
    
    public var dum:uint;
    public var ske:BitmapData;
    public function Imagenes(_W:uint=256,_H:uint=192):void{
        W=_W;H=_H;
        rec0=new Rectangle(0,0,W,H);
        noir=new BitmapData(W,H,true,0xFF000000);
        ventana=new BitmapData(W,H,true,0xFFFFFFFF);
        
        this.graphics.beginBitmapFill(ventana);
        this.graphics.drawRect(0,0,W,H);
        this.graphics.endFill();
    }
    public function refr(p:Point,mun:Mundo,vec:Vector.<Object>):void{
        ventana.lock();
        ventana.copyPixels(noir,rec0,pto0);
        
        ske=mun.img0.clone();
        dum=vec.length;
        for(var i:uint=0;i<dum;i++){
            ske.copyPixels(vec[i].img0,vec[i].rec,vec[i].pos.add(vec[i].tilt),null,null,true);
        }
        ventana.copyPixels(ske,rec0,pto0);
        ventana.unlock();
    }
    public function camera():Point{
        
        return new Point(0,0);
    }
    
}
class Mundo extends Object{
    public var W:uint=300;
    public var H:uint=200;
    public var solidarr:Array=[[10,10,20,20],[0,180,256,25]];
    public var img0:BitmapData=new BitmapData(W,H,true,0x00ffffff)
    public function Mundo(){
        var dum:uint=solidarr.length;
        var rec:Rectangle;
        img0.lock();
        for(var i:uint=0;i<dum;i++){
            rec=new Rectangle(solidarr[i][0],solidarr[i][1],solidarr[i][2],solidarr[i][3]);
            img0.fillRect(rec,0xFF000000);
        }
        img0.unlock();
    }
}

class Jugador extends Object{
    public var rec:Rectangle=new Rectangle(0,0,24,32);
    public var tilt:Point=new Point(-12,-31);
    public var pos:Point=new Point(0,0);
    public var spd:Point=new Point(0,0);
    public var img0:BitmapData=(new Dna([[24,32],[0x0,0xff000000],[[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,0,0,1,1],[0,0,0,0,1,1],[0,0,0,0,0,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1,1,1],[0,0,0,0,0,0,0,0,0,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,1,1],[1,0,0,0,0,1,1],[1,0,1,1,1,1],[1,1],[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1]]])).bmp;

}
class Bicho extends Object{
    
}
class Monitor extends Sprite{
    public var jugpos:TextField=new TextField;
    public var jugspd:TextField=new TextField;
    public function Monitor(){
        addChild(jugpos);place(jugpos,0,0);
        addChild(jugspd);place(jugspd,100,0);
    }
}

function place(tgt:Object,x:uint,y:uint):void{
    tgt.x=x;tgt.y=y;
}




//keyboard watcher
import flash.events.KeyboardEvent;

class KBW extends Object{
    public var kc:Vector.<Boolean>=new Vector.<Boolean>(128);
    public function KBW(stage:Stage){
        stage.addEventListener(KeyboardEvent.KEY_DOWN,okd);
        stage.addEventListener(KeyboardEvent.KEY_UP,oku);
    }
    private function okd(e:KeyboardEvent):void{
        kc[e.keyCode]=true;
        //trace(e.keyCode);
    }
    private function oku(e:KeyboardEvent):void{
        kc[e.keyCode]=false;
    }
}



//DNA
import flash.display.BitmapData;
class Dna{
    public var size:Vector.<uint>=Vector.<uint>([1,1]);
    public var palette:Vector.<uint>=Vector.<uint>([0,0xFFffffff]);
    public var map:Vector.<Vector.<uint>>=Vector.<Vector.<uint>>([new Vector.<uint>(1)]);
    public function Dna(code:Array){
        size=Vector.<uint>(code[0]);
        palette=Vector.<uint>(code[1]);
        code[2].forEach(
            function(row:Array,h:uint,...args):void{
                map[h]=Vector.<uint>(row);});
    }
    public function get bmp():BitmapData{
        var sheep:BitmapData=new BitmapData(size[0],size[1],true,palette[0]);
        var L:uint=palette.length;
        map.forEach(function(row:Vector.<uint>,h:uint,...args):void{
            row.forEach(function(c:uint,w:uint,...args):void{if(c&&(c<L)){sheep.setPixel32(w,h,palette[c]);}});
        });
        return sheep;
    }
}

/////  WONDERFL TRACE /////

import flash.display.Stage;
import flash.text.TextField;
import flash.text.TextFormat;


function inittrace(s:Stage):void
{
    WTrace.initTrace(s);
}

//global trace function
var trace:Function;

//wtreace class
class WTrace
{
        private static var FONT:String = "Fixedsys";
        private static var SIZE:Number = 12;
        private static var TextFields:Array = [];
        private static var trace_stage:Stage;
        
        public static function initTrace(stg:Stage):void
        {
            trace_stage = stg;
            trace = wtrace;
        }
        
        private static function scrollup():void
        {
            // maximum number of lines: 100
            if (TextFields.length > 100) 
            {
                var removeme:TextField = TextFields.shift();
                trace_stage.removeChild(removeme);
                removeme = null;
            }
            for(var x:Number=0;x<TextFields.length;x++)
            {
                (TextFields[x] as TextField).y -= SIZE*1.2;
            }
        }
    
        public static function wtrace(... args):void
        {
        
            var s:String="";
            var tracefield:TextField;
            
            for (var i:int;i < args.length;i++)
            {
                // imitating flash:
                // putting a space between the parameters
                if (i != 0) s+=" ";
                s+=args[i].toString();
            }
            

            tracefield= new TextField();
            tracefield.autoSize = "left";
            tracefield.text = s;
            tracefield.y = trace_stage.stageHeight - 20;

            var tf:TextFormat = new TextFormat(FONT, SIZE);
            tracefield.setTextFormat(tf);
            trace_stage.addChild(tracefield);
            scrollup();                      
            TextFields.push(tracefield);
            
        }
}

Forked