flash on 2011-5-17
♥0 |
Line 144 |
Modified 2011-05-17 21:23:27 |
MIT License
archived:2017-03-20 16:11:46
ActionScript3 source code
/**
* Copyright itkr ( http://wonderfl.net/user/itkr )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/kRX2
*/
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import caurina.transitions.Tweener;
public class Main extends Sprite {
/* *******************************
* 大域変数
* ****************************** */
//すべてのボックスを格納する二重配列
private var boxes:Array = new Array();
//次に光らせるすべてのボックスを含む配列
private var allNextShine:Array = new Array();
//クリック回数を保持する
private var count:int = 0;
/* *******************************
* 定数
* ****************************** */
//1リズムの秒数(*1/1000)
private const BEAT_FRAME:Number = 4;
//ビート数
private const BEAT:Number = 16;
//1ビートの秒数(*1/1000)
private const BEAT_TIME:Number = BEAT_FRAME/BEAT;
/* *******************************
* コンストラクタ
* ****************************** */
public function Main() {
var box:Sprite;
var boxesY:Array;
for(var i:int=0;i<int(460/10);i++){ //@TODO:定数化
boxesY = new Array();
for(var j:int=0;j<int(460/10);j++){ //@TODO:定数化
box = new Sprite();
box.graphics.beginFill(0x6699cc);
box.graphics.drawRect(0,0,9,9);
box.graphics.endFill();
addChild(box);
box.x = i*10;
box.y = j*10;
box.alpha = 0.2;
box.addEventListener(MouseEvent.CLICK,onClick);
box.addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
box.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
box.name =i.toString() + "," + j.toString();
boxesY.push(box);
}
boxes.push(boxesY);
}
setNextShine(17,20);
var timer1:Timer = new Timer(BEAT_FRAME*1000);
timer1.addEventListener(TimerEvent.TIMER,doRhythm);
timer1.start();
}
/* *******************************
* ボックスを順番に光らせる
* 第一引数:Array<Sprite>(光らせるボックスの位置)
* 返り値:なし
* ****************************** */
private function doRhythm(obj:TimerEvent):void{
var i:int=0;
for each(var mcs:Array in allNextShine){
i=0;
//@HAS ISSUE:Booleanを混同させないためにダミーのSpriteを使う?
for each(var mc in mcs){
if(mcs[i]){
Tweener.addTween(mcs[i],
{delay:BEAT_TIME + (BEAT_TIME*i),
time:0.25,
alpha:0.5});
Tweener.addTween(mcs[i],
{delay:BEAT_TIME + (BEAT_TIME*i)+0.25,
time:3,
alpha:0.2});
}
i++;
}
}
}
/* *******************************
* 次のアクションのリストを作る
* 第一引数:int
* 第二引数:int
* 返り値:なし
* ****************************** */
private function setNextShine(x:int, y:int):void{
//@HAS ISSUE:Booleanを混同させないためにダミーのSpriteを使う?
//リズムを決める配列(@HAS ISSUE:パラメータで受け取る?)
var rhythm:Array = new Array(true,true,true,true,true,false,true,true,true,false,true,true,false,true,true,true);
var nextShine:Array = new Array();
for(var i:int=0;i<BEAT;i++){
if(x<0||y<0||45<x||45<y){ //@TODO:定数化
nextShine.push(false);
x++;
y++;
}else if(rhythm[i]){
switch(int(count/2)){
case 0 :
nextShine.push(boxes[x][y]);
x++;
break;
case 1 :
nextShine.push(boxes[x][y]);
x--;
break;
case 2 :
nextShine.push(boxes[x][y]);
y++;
break;
case 3 :
nextShine.push(boxes[x][y]);
y--;
break;
case 4 :
nextShine.push(boxes[x][y]);
x++;
y++;
break;
case 5 :
nextShine.push(boxes[x][y]);
x++;
y--;
break;
case 6 :
nextShine.push(boxes[x][y]);
x--;
y--;
break;
case 7 :
nextShine.push(boxes[x][y]);
x--;
y++;
break;
default :
nextShine.push(boxes[x][y]);
x = x+ int(Math.random()*10/2);
y = y+ int(Math.random()*10/2);
}
}else{
nextShine.push(false);
}
}
allNextShine.push(nextShine);
count++;
if(count>18){
count = 0;
}
}
/* *******************************
* ボックスがクリックされたときの動作
* =>クリックされたボックスの座標(配列の添字)を取得する
* 第一引数:MouseEvent
* 返り値:なし
* ****************************** */
private function onClick(obj:MouseEvent):void{
obj.target.alpha = 0.5;
var x:int = -1;
var y:int = -1;
var i:uint = 0;
for each(var boxesY:Array in boxes){
if(boxesY.indexOf(obj.target)!=-1){
y = boxesY.indexOf(obj.target);
x = i;
}
i++;
}
setNextShine(x,y);
}
/* *******************************
* ボックスにマウスが乗ったときの動作
* =>マウスが乗ったSpriteの大きさを変える
* 第一引数:MouseEvent
* 返り値:なし
* ****************************** */
private function onMouseOver(obj:MouseEvent):void{
obj.target.scaleX = 1.2;
obj.target.scaleY= 1.2;
}
/* *******************************
* ボックスからマウスが離れたときの動作
* =>マウスが離れたSpriteの大きさを元に戻す
* 第一引数:MouseEvent
* 返り値:なし
* ****************************** */
private function onMouseOut(obj:MouseEvent):void{
obj.target.scaleX = 1;
obj.target.scaleY= 1;
}
}
}