Lissajous collection #2

by aobyrne forked from Lissajous collection #1 (diff: 22)
♥0 | Line 171 | Modified 2011-04-03 16:19:34 | MIT License
play

ActionScript3 source code

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

// forked from aobyrne's Lissajous collection #1
package  
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    /**
     * ...
     * @author aobyrne
     */
    public class LissajousCollection extends Sprite
    {
        private var bitmap:Bitmap;
        private var bitmapData:BitmapData;
        private var hidableTextArea:HidableTextArea;
        private var sprite:Sprite;
        public var includeOutput:Boolean;
        
        public function LissajousCollection() 
        {
            includeOutput = false;
            init(0, 0);
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }
        
        public function init(w:int, h:int):void 
        {
            var cy:int;
            var sy:int;
            var cx:int;
            var sx:int;
            bitmap = Bitmap(addChild(new Bitmap));
            var columns:Number = 8;
            var cellSize:Number = 29;
            var cellSize2:Number = 2*cellSize;
            if (w == 0)
            {
                w = cellSize2 * columns;
            }
            if (h == 0) 
            {
                h = cellSize2 * columns;
            }
            bitmapData = new BitmapData(w, h, false, 0xfffffff);
            bitmap.bitmapData = bitmapData;
            var lissajous:Lissajous;
            var total:Number = columns * columns;
            //sprite = Sprite(addChild(new Sprite));
            //sprite.addChild(bitmap);
            if (includeOutput) 
            {
                
                hidableTextArea = new HidableTextArea(this);
            }
            var indexes:Array = [];
            var disPosableindexes:Array = [];
            for (var i:int = 0; i < total; i++) 
            {
                cx =(i % columns) ;
                cy = Math.floor(i / columns);
                indexes[i]=[cx,cy]
                disPosableindexes[i]=[cx,cy]
            }
            var s:Array = disPosableindexes;
            for (var j:int = 0; j < total; j++) 
            {
                cx =indexes[j][0] ;
                sx =s[j][0] ;
                cy = indexes[j][1];
                sy = s[j][1];
                //lissajous = Lissajous(sprite.addChild(new Lissajous(this, 40+cx * 80, 40+cy * 80, cx+1, cy+1, 40, 40)));
                lissajous = Lissajous(addChild(new Lissajous(this, cellSize+cx * cellSize2, cellSize+cy * cellSize2, sx+1, sy+1, cellSize, cellSize)));
                sctrace( "( " + cx+", "+ cy+" )");
            }
            var g:Graphics = Sprite(addChild(new Sprite)).graphics;
            g.beginFill(0xff,0);
            g.drawRect(0, 0,this.width, this.height);
            addEventListener(Event.ENTER_FRAME, loop);            
        }
        
        private function loop(e:Event):void 
        {
            bitmapData.draw(this);
            
        }
        
        private function sctrace(msg:String):void 
        {
            if (includeOutput) hidableTextArea.outputPanel.text += "\n" + msg;
        }
        
    }

}
import caurina.transitions.Tweener;
import com.bit101.components.TextArea;
import flash.display.Graphics;
import flash.display.Shape;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Sprite;
class HidableTextArea
{
    private var main:Sprite;
    private var aKey:Number;
    private var hidden:Boolean;
    public var outputPanel:TextArea;
    public function HidableTextArea(mainArg:Sprite)
    {
        main =Sprite( mainArg);
        outputPanel = new TextArea(main, 500, 0, "");
        hidden = true;
        aKey = String("A").charCodeAt();
        manageListeners(true);
    }
    private function toggleVisibility():void 
    {
        onKeyBoardDown(new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, 0,aKey ));
    }
    private function manageListeners(bAdd:Boolean):void 
    {
        trace( "Additions.addKeyBoardListener > bAdd : " + bAdd );
        if (bAdd) 
        {
            
            main.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
        }
        else
        {
            main.stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
            
        }
        
    }
    
    private function onKeyBoardDown(e:KeyboardEvent):void 
    {
        manageListeners(false)
        if (e.keyCode==aKey) 
        {
            if (hidden) 
            {
                Tweener.addTween(outputPanel, { x:0, y:0, time:1, transition:"easeOutQuint", 
                onCompleteParams:[true],
                onComplete:manageListeners } )
            }
            else
            {
                Tweener.addTween(outputPanel, { x: -outputPanel.width - 5, y:0, time:1, transition:"easeOutQuint", 
                onCompleteParams:[true],
                onComplete:manageListeners } )
            }
        }
        hidden = !hidden;
    }
    
}

    class Lissajous extends Sprite 
    {
        private var freqX:Number;
        private var freqY:Number;
        private var radiusX:Number;
        private var radiusY:Number;
        private var shape:Shape;
        private var t:Number;
        private var radian:Number;
        
        public function Lissajous(lissajousCollection:LissajousCollection,xArg:Number,yArg:Number,frecXArg:Number,frecYArg:Number,radiusXArg:Number,radiusYArg:Number) 
        {
            shape = Shape(lissajousCollection.addChild(new Shape()));
            var g:Graphics = shape.graphics;
            g.beginFill(0xff);
            g.drawCircle(0, 0, 1);
            x = xArg;
            y = yArg;
            freqX = frecXArg;
            freqY = frecYArg;
            radiusX = radiusXArg;
            radiusY = radiusYArg;
            t = 0;
            radian = Math.PI / 180;
            addEventListener(Event.ENTER_FRAME, loop);
        }
        
        private function loop(e:Event):void 
        {
            shape.x = x+radiusX * Math.sin(t * freqX);
            shape.y = y+radiusY * Math.sin(t * freqY);
            t+=radian;
        }
        
    }

Forked