Shooting Star Puzzle
/**
* Copyright okoi ( http://wonderfl.net/user/okoi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/nOVE
*/
// forked from bkzen's MoviePuzzleTest
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
/**
* [企画]皆で動くパズル作ろうぜ
* http://wonderfl.net/c/yb0z
* 前から気になってた事があって、Wonderfl は色んな作品があるけど作品同士のつながりがないのが気になっていた。
* 例えば、パーツだけ作って読み込んでロードするだけで使える[素材]を作るとか。
* あと Fork することで何かに参加できるようにすればもっと面白い事になって行きそうなきがする。
* チェックメイトやJAMのような方法ではなく、Forkされたもの全てが一つの作品を作るというか。
* これからもチェックメイトやJAM以外にも[企画]タグや[素材]タグが増えていくといいなぁ。
* @author jc at bk-zen.com
*/
[SWF (backgroundColor = "0x000000", frameRate = "60", width = "465", height = "465")]
public class MoviePuzzle extends Sprite
{
private static const BG_COLOR: uint = 0x000000;
private static const FRAME_RATE: uint = 30;
public function MoviePuzzle()
{
// ローダーで読み込まれなかった時の為のデモ用
addEventListener(Event.ADDED_TO_STAGE, demo);
}
/**
*
* MoviePuzzle -> MovieJigsawPuzzle
* obj["disp"] : DisplayObject : 描画対象このオブジェクトの440x440の範囲で切り取られて描画されます。
* obj["color"] : uint : 背景色(省略時は0x000000)
* obj["frameRate"] : uint : フレームレート(省略時は60)
* obj["level"] : uint : 上限レベル(省略時は1)
* @param obj : <Object>
*/
public function initialize(obj: Object): void
{
disp = new MooPuzzle();
obj["disp"] = disp;
obj["color"] = BG_COLOR;
obj["frameRate"] = FRAME_RATE;
}
/**
* スタートする時に呼ばれます。
* @param level : uint : 指定レベル : 変える必要があれば。
*/
public function start(level: uint): void
{
Object(disp).start(level);
}
/**
* 終了した時に呼ばれます。
*/
public function end(): void
{
Object(disp).end();
}
private var disp: DisplayObject;
/**
* デモ用
* @param e
*/
private function demo(e: Event): void
{
removeEventListener(Event.ADDED_TO_STAGE, demo);
//
var obj: Object = {};
initialize(obj);
disp = obj["disp"];
var col: uint = obj["color"];
var bmd: BitmapData = new BitmapData(440, 440, false, col);
var bmp: Bitmap = new Bitmap(bmd, "auto", true);
start(1);
addChild(bmp);
addEventListener(Event.ENTER_FRAME, function(e: Event): void {
bmd.lock();
bmd.fillRect(bmd.rect, col);
bmd.draw(disp);
bmd.unlock();
} );
}
}
}
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.geom.ColorTransform;
import flash.utils.getTimer;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.display.GradientType;
import flash.geom.Matrix;
import flash.display.SpreadMethod;
import flash.display.InterpolationMethod;
/**
* かんたんそうなのを探してこちらをお借りしました。
* @see http://wonderfl.net/c/rR6A
*/
class MooPuzzle extends Sprite
{
private var _level: uint;
private var isStart: Boolean;
private var canvas: BitmapData;
private var colorTf: ColorTransform = new ColorTransform(1, 1, 1, 1, -50, -35, -15);
private var _stars:/*MoveStar*/Array;
private var _starImg:Star;
private var _step:int = 0;
function MooPuzzle()
{
super();
var mat:Matrix = new Matrix();
mat.createGradientBox( 440, 440, 45 );
graphics.beginFill( 0 );
graphics.beginGradientFill(
GradientType.LINEAR,
[0x000022, 0x000077],
[1, 1],
[0, 255],
mat,
SpreadMethod.PAD,
InterpolationMethod.LINEAR_RGB,
0.0 );
graphics.drawRect( 0, 0, 440, 440 );
graphics.endFill();
addChild(new Bitmap(canvas = new BitmapData(440, 440, true, 0)));
_starImg = new Star();
_stars = new Array();
}
public function start(level: uint): void
{
if (isStart) return;
isStart = true;
_level = level;
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e: Event): void
{
var i:int = 0;
if( _step % 6 == 0 ) GenerateMoveStar();
_step++;
for( i = _stars.length - 1; i>=0; i-- )
{
_stars[i].Update();
if( _stars[i].x < -canvas.width/2 || _stars[i].y > canvas.height + canvas.height/2 )
{
_stars.splice(i,1);
}
}
canvas.lock();
canvas.applyFilter( canvas, canvas.rect, new Point(), new BlurFilter(4, 4, 10) );
for ( i = 0; i < _stars.length; i++ )
{
canvas.draw( _starImg, _stars[i].mat, _stars[i].color, "add" );
}
canvas.unlock();
}
public function end(): void
{
removeEventListener(Event.ENTER_FRAME, loop);
isStart = false;
}
private function GenerateMoveStar() : void
{
var p1:Point = new Point( canvas.width / 2, - canvas.height / 2 );
var p2:Point = new Point( canvas.width + canvas.width / 2, canvas.height / 2 );
var ratio:Number = Math.random();
var xx:Number = p1.x + (p2.x - p1.x) * ratio;
var yy:Number = p1.y + (p2.y - p1.y) * ratio;
var star:MoveStar = new MoveStar();
var angle:Number = 135;
var scale:Number = 1 - (Math.random() * 0.7);
star.Init( xx, yy, angle, scale );
var starnum:int = _stars.length;
var i:int = 0;
for ( i = 0; i < starnum; i++ )
{
if ( _stars[i].scale >= scale ) break;
}
_stars.splice( i, 0, star );
}
}
import flash.display.Shape;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import frocessing.color.ColorHSV;
class Star extends Shape {
public function Star () {
x = 100;
y = 100;
// 星を描く
graphics.beginFill(0xFFFFFF);
for ( var i:int = 0; i < 10; i++ )
{
var radius:Number = 50;
var angle:Number = (90 + i * (360 / 10)) % 360;
if ( i % 2 == 0 ) radius = 25;
var xx:Number = Math.cos( angle * Math.PI / 180 ) * radius;
var yy:Number = Math.sin( angle * Math.PI / 180 ) * radius;
if ( i == 0 ) graphics.moveTo( xx, yy );
else graphics.lineTo( xx, yy );
}
graphics.endFill();
}
}
class MoveStar {
private var _x:Number;
public function get x():Number { return _x; }
private var _y:Number;
public function get y():Number { return _y; }
private var _mx:Number;
private var _my:Number;
private var _scale:Number;
public function get scale():Number { return _scale; }
private var _mat:Matrix;
public function get mat():Matrix { return _mat; }
private var _color:ColorTransform;
public function get color():ColorTransform { return _color; }
private var _rotate:int;
public function MoveStar() {
}
public function Init(__x:Number, __y:Number, __angle:Number, __scale:Number) : void
{
_x = __x;
_y = __y;
_scale = __scale;
var speed:Number = 30 * _scale * _scale;
var tempAngle:Number = Math.random() * 10 - 5;
_mx = Math.cos( (__angle + tempAngle) * Math.PI / 180 ) * speed;
_my = Math.sin( (__angle + tempAngle) * Math.PI / 180 ) * speed;
_mat = new Matrix( _scale, 0, 0, _scale, _x, _y );
var hsv:ColorHSV = new ColorHSV( Math.random() * 360, 0.8, 1, 0.8 );
_color = new ColorTransform( 0, 0, 0, 1, hsv.r, hsv.g, hsv.b, hsv.a );
_rotate = 0;
}
public function Update() : void
{
_x += _mx;
_y += _my;
_rotate = (_rotate + 5) % 360;
_mat = new Matrix( _scale, 0, 0, _scale, 0, 0 );
_mat.rotate( _rotate * Math.PI / 180 );
_mat.translate( _x, _y );
}
}