Kage

by t2421
フィルタお試し。
♥0 | Line 189 | Modified 2010-12-15 20:19:50 | MIT License
play

ActionScript3 source code

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

package  
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.DropShadowFilter;
    /**
     * ...
     * @author kiyo
     */
    public class Kage extends Sprite
    {
        private var ball:Ball;
        private var dropshadow:DropShadowFilter;
        private var speed:Number = 0.2;
        private var range:Number = 30;
        private var angleY:Number = 0;
        private var ballCenter:Number;
        
        public function Kage() 
        {
            ball = new Ball(30);
            addChild(ball);
            ball.x = stage.stageWidth / 2;
            ball.y = stage.stageHeight / 2;
            ballCenter = ball.y;
            dropshadow = new DropShadowFilter(0, 0, 0, 0.5, 4, 4, 1, 2);
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            
        }
        
        private function enterFrameHandler(e:Event):void 
        {
            ball.vy = Math.sin(angleY) * range;
            ball.y = ball.vy + ballCenter;
            angleY += speed;
            var dx:Number = mouseX - ball.x;
            var dy:Number = mouseY - ball.y;
            
            var distance:Number = Math.sqrt(dx * dx + dy * dy);
            //trace("KamibanaTool.getDistance(mouseX, ball.x, mouseY, ball.y) : " + KamibanaTool.getDistance(mouseX, ball.x, mouseY, ball.y));
            var radian:Number = Math.atan2(dy, dx);
            var angle:Number = KamibanaPhysics.radianToRotaion(radian);
            dropshadow.angle = angle + 180;//mouseの反対側に影を落とす。
            //dx = dx < 0? -dx:dx;
            //dy = dy < 0? -dy:dy;
            dropshadow.blurX = distance / 2;
            dropshadow.blurY = distance / 2;
            dropshadow.distance = distance;
            ball.filters = new Array(dropshadow);
        }
        
    }

}

import flash.display.Sprite;

class Ball extends Sprite {
    public var vx:Number;
    public var vy:Number;
    private var _radius:Number;
    private var _color:Number;

    public function Ball(radius:Number=10,color:uint=0xff0000) {
        _radius=radius;
        _color=color;
        update();
    }

    private function update():void {
        graphics.clear();
        graphics.beginFill(color);
        graphics.drawCircle(0,0,radius);
        graphics.endFill();
    }

    public function setRadius(radius:Number):void {
        _radius=radius;
        update();
    }

    public function setColor(color:uint):void {
        _color=color;
        update();
    }

    public function get radius():Number {
        return _radius;
    }

    public function get color():Number {
        return _color;
    }
}

class KamibanaPhysics {
    static public function radianToRotaion(radian:Number):Number {
        var angle:Number=radian*180/Math.PI;
        return angle;
    }

    static public function rotationToRadian(angle:Number):Number {
        var radian:Number=angle*Math.PI/180;
        return radian;
    }

}

import flash.display.DisplayObject;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.geom.Point;
class KamibanaTool {

    static public function getDistance(x2:Number,x1:Number,y2:Number,y1:Number):Number {
        var dx:Number=x2-x1;
        var dy:Number=y2-y1;
        var dist:Number=Math.sqrt(dx*dx+dy*dy);
        return dist;
    }

    static public function getStageCenter(stage:Stage):Point {
        var centerX:Number=stage.stageWidth/2;
        var centerY:Number=stage.stageHeight/2;

        return new Point(centerX,centerY);

    }

    static public function placeStageCenter(stage:Stage,object:DisplayObject):void {
        object.x=stage.stageWidth/2;
        object.y=stage.stageHeight/2;
    }

    static public function setStageInfo(stage:Stage):void {
        stage.scaleMode=StageScaleMode.NO_SCALE;
        stage.align=StageAlign.TOP_LEFT;
    }

    static public function getFaceToTargetRotation(targetObject:DisplayObject,targetX:Number,targetY:Number):Number {
        var dx:Number=targetX-targetObject.x;
        var dy:Number=targetY-targetObject.y;
        var rotation:Number=KamibanaPhysics.radianToRotaion(Math.atan2(dy,dx));
        return rotation;
    }

    static public function getColor(colorName:String, color:uint):uint {
        var newColor:uint;
        switch(colorName) {
            case KamibanaProperty.RED:
            newColor = color >> 16;
            break;
            
            case KamibanaProperty.GREEN:
            newColor = color >> 8 & 0xff;//8桁のみ残す
            break;
            
            case KamibanaProperty.BLUE:
            newColor = color & 0xff;//8桁のみ残す。
            break;
            
            case KamibanaProperty.ALPHA:
            break;
        }
        return newColor;
    }
    
    static public function getAlphaColor(colorName:String, color:uint):uint {
        var newColor:uint;
        switch(colorName) {
            case KamibanaProperty.RED:
            newColor = color >> 16 & 0xff;
            break;
            
            case KamibanaProperty.GREEN:
            newColor = color >> 8 & 0xff;//8桁のみ残す
            break;
            
            case KamibanaProperty.BLUE:
            newColor = color & 0xff;//8桁のみ残す。
            break;
            
            case KamibanaProperty.ALPHA:
            newColor = color >> 24;
            break;
        }
        return newColor;
    }
    
    static public function get32Bit(num:uint):String
    {
        var sa:int;
        var newNum:String="";
        sa = 32 - num.toString(2).length;
        if (sa != 0) {
            for (var i:int = 0; i < sa; i++) 
            {
                newNum += "0";
            }
            newNum += num.toString(2);
        }else {
            newNum = num.toString(2);
        }
        
        return newNum;
    }
    
    static public function get24Bit(num:uint):String
    {
        var sa:int;
        var newNum:String="";
        sa = 24 - num.toString(2).length;
        if (sa != 0) {
            for (var i:int = 0; i < sa; i++) 
            {
                newNum += "0";
            }
            newNum += num.toString(2);
        }else {
            newNum = num.toString(2);
        }
        
        return newNum;
    }

}

class KamibanaProperty
{
        
    public static const RED:String = "red";
    public static const GREEN:String = "green";
    public static const BLUE:String = "blue";
    public static const ALPHA:String = "alpha";
        
}