Kage
フィルタお試し。
♥0 |
Line 189 |
Modified 2010-12-15 20:19:50 |
MIT License
archived:2017-03-20 16:53:09
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";
}