Fun w/ Starling

by hemingway
Demonstrating Stage3D & Starling as the new standard for writing anything really.

Particles (2x2)
♥0 | Line 130 | Modified 2012-12-05 02:38:41 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.display.*;
    import flash.system.*;
    import flash.events.*;
    import flash.utils.*;
    import flash.text.*;
    import flash.geom.*;
    
    import starling.core.*;
    
    [SWF(frameRate = 60, width = 465, height = 465)]
    public class Main extends flash.display.Sprite
    {
        private var $starling :Starling;
        
        private var debugText :TextField = new TextField();
        
        public function Main()
        {
            addEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }
        
        public function _init() :void
        {
            $starling = new Starling(Port, stage);
            $starling.enableErrorChecking = false;
            $starling.showStats = true;
            $starling.start();
            
            graphics.clear     ();
            graphics.lineStyle (1, 0, 0.75);
            graphics.drawRect  (0, 0, 464, 464);
        }
        
        public function addedToStage($e:Event) :void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStage);

            _init();
        }
    }
}
import flash.display.AVM1Movie;

import flash.events.MouseEvent;
import flash.geom.Point;
    
import starling.core.*;
import starling.display.*;
import starling.events.*;
import starling.utils.*;
    
class Port extends starling.display.Sprite
{
    internal var pArray :Array = [];
    
    public function Port()
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
    }
        
    public function _init() :void
    {
    }
        
    public function addedToStage($e:Event) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);

        /*children*/
        for (var i:int = 0; i < 5000; i++)
            {pArray[i] = new Particle((Math.random() * 465), (Math.random() * 465)); addChild(pArray[i]); }
            
        stage.addEventListener(TouchEvent.TOUCH, onInteraction);
        
        _init();
    }
    
    public function onInteraction($e:TouchEvent) :void
    {
        var $touch:Touch = $e.getTouch(stage);
        
        switch ($touch.phase)
        {
            case (TouchPhase.BEGAN):
                for (var i:int = 0; i < 5000; i++)
                    {pArray[i].x = pArray[i].x - (1 / ($touch.globalX - pArray[i].x)); pArray[i].y = pArray[i].y - (1 / ($touch.globalY - pArray[i].y));}
            break;
            
            case (TouchPhase.MOVED):
                for (var j:int = 0; j < 5000; j++)
                    {pArray[j].x = pArray[j].x - (1 / ($touch.globalX - pArray[j].x)); pArray[j].y = pArray[j].y - (1 / ($touch.globalY - pArray[j].y));}
            break;
            
            case (TouchPhase.ENDED):
            break;
        }
    }
}

class Particle extends starling.display.Sprite
{
    internal var _x :Number;
    internal var _y :Number;
    internal var _w :Number;
    internal var _h :Number;
    internal var _a :Number;
    internal var _c :Number;
    
    internal var pQuad :Quad = new Quad(2, 2, 0);
    
    public function Particle($x:Number = 232.5, $y:Number = 232.5)
    {
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        _x = $x;
        _y = $y;
        _w = 2;
        _h = 2;
        _a = 0.75;
        _c = 0;
    }
    
    public function _init() :void
    {
        pQuad.x = _x;
        pQuad.y = _y;
        pQuad.width = _w;
        pQuad.height = _h;
        pQuad.alpha = _a;
        pQuad.color = _c;
    }
    
    public function addedToStage($e:Event) :void
    {
        removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
        
        /*children*/
        addChild(pQuad);     
        
        _init();
    }
    
    public override function get x() :Number
    { return _x }
    public override function get y() :Number
    { return _y }
    public override function set x($value:Number) :void
    { _x = $value; _init(); }
    public override function set y($value:Number) :void
    { _y = $value; _init(); }
    public override function set width($value:Number) :void
    { _w = $value; _init(); }
    public override function set height($value:Number) :void
    { _h = $value; _init(); }
    public override function set alpha($value:Number) :void
    { _a = $value; _init(); }
    public function set color($value:Number) :void
    { _c = $value; _init(); }
}