15 puzzle Slideshow for Christmas
15 puzzle のスライドショーです。
パズルの解法は9パターン
画像は29枚用意してあります。
BGMはきよしこのよる、ジングルベルです。
プログラムを起動したときにランダムに決まります。
写真はFlickrから拝借しています。
BGMは、フリー音楽素材 - SHWフリー音楽素材 http://shw.in/about/ から拝借しました。
素敵な写真と音楽ですね☆
Merry Christmas!!
/**
* Copyright WinField95 ( http://wonderfl.net/user/WinField95 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/yb4D
*/
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.system.Security;
import mx.modules.ModuleManagerGlobals;
import mx.resources.IResourceManager;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.TextFormat;
import flash.filters.GlowFilter
import flash.text.TextField;
[SWF(frameRate = "30")] // 1 / 30 秒おきにmainLoopを呼び出す。
public class Main extends Sprite
{
public static const WIDTH:int = 4;
public static const HEIGHT:int = 4;
// プログラムの状態 mainLoop で使用
public static const INIT:int = 1;
public static const PREPARE:int = 2;
public static const CHECK:int = 3;
public static const MOVE:int = 4;
public static const END:int = 5;
public static const DISPLAY:int = 6;
// 画像を表示するフレーム数
public static const DISPLAYFRAME:int = 300;
public var frame:int;
//方向ベクトル
public static const dx:Array = [0,1,0,-1];
public static const dy:Array = [-1,0,1,0];
private var count:int = 0; // 読み込んだ画像数
private var images:Array; // 読み込んだ画像
private var imgBitmapdata:BitmapData; // 読み込んだ画像のビットマップ
private var imgPreBitmapdata:BitmapData // 前回読み込んだ画像のビットマップ
private var imgBitmap:Bitmap; // 読み込んだ画像のビットマップ
private var imgPreBitmap:Bitmap // 前回読み込んだ画像のビットマップ
private var pieces:Array; // パズルのピースの集合
private var mainState:int // Mainの現在の状態
private var puzzleState:Array // パズルの現在の状態
private var moveID // 移動するべきピースのID
private var startPoint:Point // 移動時の開始座標
private var nextPoint:Point // 移動時の目標座標
private var v:Number; // 速度
private var a:Number; // 加速度
private var diff:Number; // 移動距離
private var direction1:int; // 移動方向
private var direction2:int; // 移動方向
private var solvePath:SolvePath; // パズルの解法
private var backGround:Sprite; // 背景
//private var rotateImages:Array;
private var snows:Array; // 雪のインスタンスを管理
//private var canvas:BitmapData; // これに雪を描く。
private var textBitmap:Bitmap; // メリークリスマス
private var sound1:Sound // BGM1
private var sound2:Sound // BGM2
//private var test: Sprite; // TEST
private var now:int // 現在の画像のID
// 画像のダウンロード元、主にflickrから拝借。
private const IMAGE_URL:Array =
[
"http://farm1.staticflickr.com/133/331473239_22148d35db.jpg" ,
"http://farm4.staticflickr.com/3505/5736699497_4775913884.jpg" ,
"http://farm2.staticflickr.com/1106/5149207717_aa0dd823c1.jpg",
"http://farm8.staticflickr.com/7147/6689855801_6f5f08fd58.jpg",
"http://farm8.staticflickr.com/7166/6689869671_74d85f8ffa.jpg" ,
"http://farm6.staticflickr.com/5242/5298952146_b1540741dd.jpg",
"http://farm4.staticflickr.com/3292/3123211582_4531cd0676.jpg" ,
"http://farm6.staticflickr.com/5029/5670924229_1937294879.jpg",
"http://farm3.staticflickr.com/2638/4128207576_91e43a03ba.jpg",
"http://farm7.staticflickr.com/6105/6369270209_8f1bfd520a.jpg",
"http://farm7.staticflickr.com/6104/6377293823_cac1cda804.jpg",
"http://farm9.staticflickr.com/8202/8183862967_12dbf046e3.jpg",
"http://farm6.staticflickr.com/5282/5253681277_78170e59e6.jpg",
"http://farm6.staticflickr.com/5129/5257528268_b16d04667b.jpg",
"http://farm5.staticflickr.com/4014/4206431435_269922e16f.jpg",
"http://farm6.staticflickr.com/5045/5270600203_d153f03ccb.jpg",
"http://farm9.staticflickr.com/8204/8187687440_fb06453b35.jpg",
"http://farm6.staticflickr.com/5047/5302051252_c17449bea3.jpg" ,
"http://farm1.staticflickr.com/3/3796790_917c4ac3b4.jpg" ,
"http://farm7.staticflickr.com/6107/6340228795_41f21660be.jpg",
"http://farm8.staticflickr.com/7164/6538514229_9044b63f21.jpg",
"http://farm1.staticflickr.com/134/370621720_8f41f08a25.jpg",
"http://farm3.static.flickr.com/2205/2532926223_6b2745185b.jpg",
"http://farm5.staticflickr.com/4148/5040639634_ceb56bcb2e.jpg",
"http://farm1.staticflickr.com/32/54527751_ffae06bf62.jpg",
"http://farm3.staticflickr.com/2527/4165552937_db6778bb09.jpg",
"http://farm6.staticflickr.com/5083/5259436844_3d5c24535f.jpg",
"http://farm8.staticflickr.com/7167/6559867027_45751b3915.jpg",
"http://farm6.staticflickr.com/5128/5276992365_b12ecf6b64.jpg" ,
//おまけ
//"http://farm9.staticflickr.com/8345/8189180209_b705c1a466_b.jpg",
];
public function Main()
{
// 背景を描く
backGround = new Sprite();
backGround.graphics.beginFill(0xF);
backGround.graphics.drawRect(0, 0, 465, 465);
backGround.graphics.endFill();
addChild(backGround);
snows = new Array();
images = new Array(IMAGE_URL.length);
// crossdomain.xmlを読み込む
Security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
for (var i:int = 0; i < IMAGE_URL.length; i++)
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.load(new URLRequest(IMAGE_URL[i]), new LoaderContext(true));
loader.name = i.toString();
}
// BGMを読み込む フリー音楽素材 - SHWフリー音楽素材 http://shw.in/about/
sound1 = new Sound(new URLRequest("http://shw.in/sozai/audio120402/xmas-jinglebell1-short.mp3")); // ジングルベル
sound2 = new Sound(new URLRequest("http://shw.in/sozai/audio120402/xmas-kiyoshikonoyoru1.mp3")); // きよしこのよる
//sound.play(0, 100);
if (Math.floor(Math.random()*2) == 0) sound1.play(0,100);
else sound2.play(0,100);
}
private function initHandler(event:Event):void
{
var loader:Loader = event.currentTarget.loader;
var matrix:Matrix = new Matrix();
matrix.scale(465 / loader.width, 465 / loader.height);
var bd:BitmapData = new BitmapData(465,465);
bd.draw(loader,matrix);
images[event.currentTarget.loader.name] = bd;
if (++count == IMAGE_URL.length) completeHandler();
}
private function completeHandler():void
{
/*
// メリークリスマスを書く。
textBitmap = new Bitmap();
//textBitmap = Text.textToBitmap("メリークリスマス",30,0xFFFFFF));
textBitmap = Text.textToBitmap(Text.createTextField("Merry Christmas",30,0xFFFFFF));
textBitmap.x = 75;
textBitmap.y = 410;
textBitmap.filters = [new GlowFilter(0xFFFFFF, 1, 6, 6, 1, 3,false,false)];
addChild(textBitmap);
*/
images = shuffle(images); // イメージデータの順番をシャッフル
mainState = INIT;
imgPreBitmapdata = new BitmapData(Piece.SIZE*Piece.WIDTH,Piece.SIZE*Piece.HEIGHT,false,0x0);
// 最初に消す用のピースを用意しておく。
pieces = new Array();
for (var i:int = 0 ; i < 16 ; i++) {
var bd:BitmapData = new BitmapData(Piece.SIZE,Piece.SIZE, false);
bd.copyPixels(imgPreBitmapdata, new Rectangle((int)(i%4)*Piece.SIZE,(int)(i/4)*Piece.SIZE,Piece.SIZE, Piece.SIZE), new Point());
//addChild(new Bitmap(bd));
var piece:Piece = new Piece(bd, i);
var id:int;
if (i + 1 == 16) id = 0;
else id = i + 1;
pieces[id] = piece;
addChild(pieces[id]);
pieces[id].visible = false;
}
addEventListener(Event.ENTER_FRAME,mainLoop);
}
// メインループ
private function mainLoop(event:Event):void{
updateSnow();
switch(mainState) {
case INIT:
init();
break;
case PREPARE:
prepare();
break;
case CHECK:
check();
break;
case MOVE:
move();
break;
case END:
end();
break;
case DISPLAY:
display();
break;
}
}
// 雪の動きを更新する。
private function updateSnow():void {
for (var i:int = 0 ; i < snows.length ; i++) {
snows[i].move();
}
// 雪を一粒生成する。 インスタンスを生成するのは200粒まで。
if(snows.length < 200)emitParticle(Math.random() * 465, 0, Math.random() + 0.5);
}
// 雪を 1 粒発生させる関数
public function emitParticle(ex:Number, ey:Number, s:Number = 1, c:int = 0xffffff, vx:Number = 0, vy:Number = 0):void {
var p:SnowParticle = new SnowParticle(ex,ey,vx,vy,s,c); // 雪の粒のインスタンスを作成。
addChild(p);
snows.push(p); // 保存
}
//前回の画像を徐々に薄くしていく。
private function prepare():void {
imgPreBitmap.alpha = Math.max(imgPreBitmap.alpha - 0.001,0.0);
if (imgPreBitmap.alpha == 0.0) mainState = CHECK;
}
// 初期化を行う。
private function init():void {
// 前回のピースの表示を解除
for (var i:int = 0 ; i < 16 ; i++) {
removeChild(pieces[i]);
}
solvePath = SolvePathManager.getInstance().getSolvePath();
puzzleState = new Array();
solvePath.getInitState(puzzleState);
for (var i = 0 ; i < Piece.HEIGHT ; i++) {
for ( var j = 0 ; j < Piece.WIDTH ; j++){
trace(puzzleState[i][j]);
}
}
imgBitmapdata = new BitmapData(Piece.HEIGHT*Piece.SIZE,Piece.WIDTH*Piece.SIZE);
imgBitmapdata.draw(images[now]);
now = (now + 1) % images.length;
pieces = new Array();
for (var i:int = 0 ; i < 16 ; i++) {
var bd:BitmapData = new BitmapData(Piece.SIZE,Piece.SIZE, false);
bd.copyPixels(imgBitmapdata, new Rectangle((int)(i%4)*Piece.SIZE,(int)(i/4)*Piece.SIZE,Piece.SIZE, Piece.SIZE), new Point());
var piece:Piece = new Piece(bd, i);
var id:int;
if (i + 1 == 16) id = 0;
else id = i + 1;
pieces[id] = piece;
}
// ピースを初期値に置いていく。
for (var i:int = 0 ; i < 4 ; i++) {
for (var j:int = 0 ; j < 4 ; j++) {
var id:int = puzzleState[i][j];
pieces[id].x = j*Piece.SIZE;
pieces[id].y = i*Piece.SIZE;
addChild(pieces[id]);
}
}
// 0番目のピースを非表示にする
pieces[0].visible = false;
pieces[0].frame.alpha = 0.0;
pieces[0].alpha = 0.0;
// imgPreBitmapに画像データを格納
imgPreBitmap = new Bitmap(imgPreBitmapdata);
addChild(imgPreBitmap);
// imgBitmapに画像データを格納
imgBitmap = new Bitmap(imgBitmapdata);
imgPreBitmapdata = imgBitmapdata;
mainState = PREPARE;
}
/*
* check関数
*
* パズルが完成したかどうかの確認。
* 移動するべきピースとその方向を確認。
* パズルの状態の更新
*
*/
private function check():void{
direction1 = solvePath.getMoveDirection();
direction2 = (direction1 + 2) % 4;
if (direction1 == -1) {
mainState = END;
return;
}
startPoint = new Point(pieces[0].x/Piece.SIZE + dx[direction1] , pieces[0].y/Piece.SIZE + dy[direction1]);
nextPoint = new Point(pieces[0].x/Piece.SIZE,pieces[0].y/Piece.SIZE);
trace("nextPoint");//
trace(startPoint.x);
trace(startPoint.y);
trace("direction1 = " + direction1);
moveID = puzzleState[startPoint.y][startPoint.x];
trace(puzzleState[startPoint.y][startPoint.x]);
// swap
var tmp:int = puzzleState[nextPoint.y][nextPoint.x];
puzzleState[nextPoint.y][nextPoint.x] = puzzleState[startPoint.y][startPoint.x];
puzzleState[startPoint.y][startPoint.x] = tmp;
trace(puzzleState[startPoint.y][startPoint.x]);
v = 3.0;
a = 0.1;
diff = 0.0;
mainState = MOVE;
}
private function move():void {
v += a;
diff += Math.abs(dx[direction1] * v + dy[direction1] * v);
diff = Math.min(diff,Piece.SIZE);
if (diff == Piece.SIZE) {
pieces[moveID].x = nextPoint.x * Piece.SIZE;
pieces[moveID].y = nextPoint.y * Piece.SIZE;
pieces[0].x = startPoint.x * Piece.SIZE;
pieces[0].y = startPoint.y * Piece.SIZE;
mainState = CHECK;
return;
}
pieces[moveID].x += v * dx[direction2];
pieces[moveID].y += v * dy[direction2]
pieces[0].x += v * dx[direction1];
pieces[0].y += v * dy[direction1];
}
private function end():void {
// 0番目のピースを表示する
if(pieces[0].visible == false){
pieces[0].visible = true;
}
//徐々にフレームと数字を薄くしていく。
for (var i:int = 0 ; i < 16 ; i++) {
pieces[i].frame.alpha = Math.max(pieces[i].frame.alpha - 0.005, 0.0);
pieces[i].bitmap.alpha = Math.max(pieces[i].frame.alpha - 0.005, 0.0);
}
pieces[0].alpha = Math.min(pieces[0].alpha + 0.01,1.0);
if (pieces[0].alpha == 1.0) {
frame = 0;
mainState = DISPLAY;
}
}
private function display():void {
frame++;
if (frame > DISPLAYFRAME) {
mainState = INIT;
}
}
//配列をランダムにソートしてシャッフル
private function shuffle(data:Array):Array{
var temp:Array = data.slice();
var dest:Array = new Array();
while (temp.length > 0)
{
var index:int = Math.random() * temp.length;
dest.push(temp[index]);
temp.splice(index, 1);
}
return dest;
}
}
}
import flash.text.TextField;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextFormat;
import flash.filters.GlowFilter;
class Piece extends Sprite
{
public static const WIDTH:int = 4; // 幅
public static const HEIGHT:int = 4; // 高さ
public static const LENGTH:int = WIDTH * HEIGHT; // ピースの数(空白含む)
public static const LAST:int = WIDTH * HEIGHT - 1; // ピースの数(空白含まない)
public static const SIZE:int = 116; // 一つあたりのピースサイズ
public var frame:Sprite;
public var bitmap:Bitmap;
public var number:int;
public function Piece(bd:BitmapData, number:int)
{
addChild(new Bitmap(bd));
// 枠を表示
frame = new Sprite();
//frame.graphics.lineStyle(2.0);
frame.graphics.beginFill(0x0);
frame.graphics.drawRect(0, 0, width, height);
frame.filters = [new GlowFilter(0xFFFFFF, 1.0, 20, 20, 1, 1, true,true)];
frame.graphics.endFill();
addChild(frame);
this.number = number;
bitmap = Text.textToBitmap(Text.createTextField((number+1).toString(),30,0x0));
bitmap.filters = [new GlowFilter(0xFFFFFF, 1, 6, 6, 1, 3,false,false)];
bitmap.y = (height - bitmap.height) / 2;
bitmap.x = (width - bitmap.width) / 2;
addChild(bitmap);
}
}
// Singleton
final class SolvePathManager {
private static var solvePaths:Array // 解法データの集合
private static var id:int // 現在の解法データのID
private static var instance:SolvePathManager; // インスタンス
public function SolvePathManager(){
solvePaths = new Array();
// C++の反復深化法のアルゴリズムを用いたプログラムの出力結果:解法の手順と、初期状態、の何個かを利用。
var path:Array = [0, 3, 3, 0, 1, 2, 2, 3, 0, 1, 2, 1, 0, 0, 3, 0, 3, 2, 2, 3, 0, 0, 1, 2, 3, 0, 1, 1, 1, 2, 3, 3, 0, 1, 1, 2, 3, 3, 2, 1, 1, 0, 3, 3, 2, 3, 2, 1, 0, 1, 2, 1, 0, 0, 3, 2, 1, 2];
var initState:Array = [[12, 11, 4, 2],
[14, 13, 5, 10],
[8, 3, 15, 7],
[9, 6, 1, 0]];
solvePaths.push(new SolvePath(path, initState));
var path:Array = [0, 3, 3, 2, 2, 3, 0, 0, 1, 1, 0, 1, 2, 2, 3, 3, 0, 0, 3, 2, 2, 1, 1, 0, 0, 3, 2, 2, 2, 3, 0, 0, 1, 2, 1, 0, 0, 1, 2, 2, 2, 3, 0, 1, 0, 3, 2, 1, 2];
var initState:Array = [[8, 2, 10, 15],
[9, 13, 3, 4],
[14, 1, 11, 0],
[6, 5, 12, 7]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [0, 0, 0, 3, 3, 3, 2, 1, 2, 2, 1, 1, 0, 0, 3, 0, 3, 2, 1, 0, 1, 2, 3, 2, 1, 2, 3, 3, 3, 0, 0, 0, 1, 2, 2, 2, 3, 0, 0, 1, 2, 1, 1, 2];
var initState:Array = [[8, 2, 3, 10],
[9, 13, 4, 11],
[14, 1, 7, 12],
[6, 5, 15, 0]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [1, 0, 0, 3, 2, 3, 0, 3, 2, 1, 2, 2, 3, 0, 0, 1, 0, 3, 2, 2, 1, 1, 1, 0, 3, 3, 2, 1, 2, 1, 0, 0, 3, 2, 2, 1, 0, 0, 3, 2, 1, 2];
var initState:Array = [[11, 5, 4, 15],
[2, 12, 3, 10],
[13, 1, 0, 6],
[14, 9, 8, 7]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [0, 3, 3, 2, 1, 1, 0, 3, 3, 2, 1, 1, 0, 0, 3, 3, 0, 3, 2, 2, 1, 1, 0, 0, 3, 3, 2, 1, 1, 1, 0, 3, 3, 2, 2, 1, 1, 0, 3, 2, 2, 1];
var initState:Array = [[4, 5, 2, 12],
[3, 10, 8, 7],
[1, 15, 11, 14],
[13, 6, 9, 0]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [0, 1, 2, 1, 0, 0, 3, 2, 1, 0, 1, 2, 2, 3, 0, 1, 2, 3, 3, 0, 1, 0, 0, 3, 3, 2, 1, 2, 1, 0, 0, 1, 2, 2, 3, 0, 0, 3, 3, 2, 2, 1, 1, 1, 2];
var initState:Array = [[3, 10, 11, 7],
[2, 12, 14, 9],
[13, 5, 8, 4],
[0, 1, 15, 6]];
solvePaths.push(new SolvePath(path, initState));
var path:Array = [0, 0, 3, 0, 3, 2, 1, 2, 3, 0, 1, 2, 2, 3, 0, 1, 1, 0, 3, 0, 3, 2, 3, 0, 1, 2, 2, 1, 2, 3, 0, 3, 0, 1, 1, 2, 2, 3, 0, 0, 1, 2, 1, 2];
var initState:Array = [[9, 10, 7, 4],
[2, 3, 11, 15],
[14, 8, 1, 12],
[13, 6, 5, 0]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [2, 3, 0, 0, 1, 2, 3, 3, 0, 0, 3, 2, 1, 2, 3, 0, 1, 0, 1, 1, 2, 2, 3, 3, 2, 3, 0, 1, 0, 1, 2, 2, 3, 0, 0, 1, 0, 3, 2, 1, 2, 2, 1, 0, 0, 3, 2, 1, 2];
var initState:Array = [[14, 13, 3, 6],
[1, 5, 11, 10],
[2, 12, 8, 0],
[7, 9, 15, 4]];
solvePaths.push(new SolvePath(path,initState));
var path:Array = [3, 3, 3, 0, 0, 1, 2, 1, 0, 3, 0, 3, 2, 2, 1, 2, 1, 0, 3, 0, 3, 0, 1, 2, 1, 0, 1, 2, 2, 3, 3, 2, 1, 0, 0, 3, 2, 3, 2, 1, 1, 1];
var initState:Array = [[1, 14, 11, 3],
[2, 5, 13, 4],
[9, 7, 10, 8],
[12, 6, 15, 0]];
solvePaths.push(new SolvePath(path,initState));
// パズルの解法をシャッフル
solvePaths = shuffle(solvePaths);
}
// パズルの解法を取得。
public function getSolvePath():SolvePath{
if (id == solvePaths.length) id = 0;
return solvePaths[id++];
}
// SolvePathManagerのインスタンスを取得。
public static function getInstance():SolvePathManager {
if (instance == null) instance = new SolvePathManager();
return instance;
}
//配列をランダムにソートしてシャッフル
private function shuffle(data:Array):Array{
var temp:Array = data.slice();
var dest:Array = new Array();
while (temp.length > 0)
{
var index:int = Math.random() * temp.length;
dest.push(temp[index]);
temp.splice(index, 1);
}
return dest;
}
}
// パズルの解法手順と、初期状態を管理
class SolvePath {
private var path:Array;
private var initState:Array;
private var cnt:int;
public function SolvePath(_path:Array,_initState:Array) {
path = _path;
initState = _initState;
init();
}
public function init():void {
cnt = 0;
}
public function getInitState(state:Array):void{
for (var i = 0 ; i < Piece.HEIGHT ; i++) {
var tmp:Array = new Array();
for (var j = 0 ; j < Piece.WIDTH ; j++) {
tmp.push(initState[i][j]);
}
state.push(tmp);
}
}
public function getMoveDirection():int {
if (cnt >= path.length) {
init();
return -1;
}
return path[cnt++];
}
}
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.text.TextFormat;
class Text
{
public static function createTextField(text:String, size:int, color:int):TextField
{
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("_typeWriter", size, color, true);
tf.text = text;
tf.autoSize = "left";
tf.selectable = false;
return tf;
}
public static function textToBitmap(tf:TextField, transparent:Boolean = true):Bitmap
{
var bd:BitmapData = new BitmapData(tf.width, tf.height, transparent, 0x0);
bd.draw(tf);
return new Bitmap(bd);
}
}
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.GlowFilter;
// 雪の粒
class SnowParticle extends Sprite{
private static const G:Number = 0.05; // 重力加速度
private var vx:Number; // x方向の速度
private var vy:Number; // y方向の速度
private var s:Number; // 現在のスピード
private var c:int; // 雪の色
private var grow_c:int; // キラキラの色
private var sp:Sprite; // 雪のSprite
public function SnowParticle(ex:Number,ey:Number,vx:Number,vy:Number,s:Number,c:int){
// パラメータ設定
this.x = ex;
this.y = ey;
this.vx = vx;
this.vy = vy;
this.s = s;
this.c = c;
sp = new Sprite();
sp.graphics.beginFill(c);
// ランダムに大きさを決定する。
s = Math.floor(3*Math.random()) + 1;
sp.graphics.drawRect(0, 0, s, s);
sp.graphics.endFill();
// ランダムにキラキラの色を決定する。
var rand:int = Math.floor(5*Math.random());
if (rand == 0)grow_c = 0xFFFFFF;
else if (rand == 1)grow_c = 0xFF0000;
else if (rand == 2)grow_c = 0x00FF00;
else if (rand == 3)grow_c = 0x0000FF;
else if (rand == 4)grow_c = 0xFFFF00;
sp.filters = [new GlowFilter(grow_c, 1, 6, 6, 5, 3,false,false)]; // キラキラを描く
addChild(sp);
}
public function move():void {
vy += G * s; // 重力を加える
vx += 2.0*Math.random()-1.0;
y += vy; // 動かす
x += vx;
parent.addChildAt(this, parent.numChildren - 1);
if (y > 465) { //画面外にでたら再利用する。
x = Math.random() * 465;
y = 0;//, Math.random() + 0.5);
vx = 0.0;
vy = 0.0;
}
}
}