Interactive nested arm segments

by milchreis forked from nested arms (diff: 45)
Press down on any arm and use your arrow key left and right to rotate it as long as you keep the mouse button down.
♥0 | Line 54 | Modified 2014-08-24 08:20:08 | MIT License
play

ActionScript3 source code

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

// forked from milchreis's nested arms
package 
{
    import flash.display.Sprite;
    
    public class FlashTest extends Sprite 
    {
        public function FlashTest() 
        {
            var arm:Arm = new Arm(60,8);
            arm.x = stage.stageWidth/2;
            addChild(arm);
        }
    }
}
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;

import flash.display.Sprite;

import flash.events.MouseEvent;
import flash.events.KeyboardEvent;

internal class Arm extends Sprite
{
    private var color:uint = Math.random() * 0xffffff;
    
    public function Arm (length:Number = 60, depth:uint = 0)
    {
        
        graphics.beginFill(color);
        graphics.drawRoundRect(-20, -20, 40, length + 40, 40, 40);
        
        if (depth > 0)
        {
            var arm:Arm = new Arm(length, depth-1)
            arm.y = length;
            
            addChild(arm);
        }
        
        addEventListener(MouseEvent.MOUSE_DOWN, onDown);
    }
    
    private function onDown(e:Event):void
    {
        e.stopPropagation();
        
        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
        stage.addEventListener(MouseEvent.MOUSE_UP, onUp); 
    }
    
    private function onKey(e:KeyboardEvent):void
    {     
        if(e.keyCode == Keyboard.LEFT)
            rotation -= 10;
        else if (e.keyCode == Keyboard.RIGHT)
            rotation += 10;
    }

    private function onUp(e:MouseEvent):void
    {
        stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKey);
        stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); 
    }
}

internal const trace:Function = Wonderfl.log;