|
var p:Array;//各雪の位置 var kasoku:Array;//各雪の加速するための定数(kasoku分だけpushされる)
[setup, 400, 400]{ //障害物の岩をActionScriptでムービークリップとして作成する. _root.createEmptyMovieClip("iwa", 100); _root["iwa"].beginFill(0xFFFFFF, 20); _root["iwa"].moveTo(200, 200); _root["iwa"].lineTo(100, 300); _root["iwa"].lineTo(200, 400); _root["iwa"].lineTo(300, 300); _root["iwa"].endFill();
//各雪の位置と加速の定数を初期化する. p = new Array(); kasoku = new Array(); for(var i=0; i < 40; ++i){ p[i] = new point(random()*400, random()*200);//最初,雪の位置はランダム kasoku[i] = random()*5+1;//加速の定数は1 ~ 6の間 } //画面背景を黒にする setBackColor(0, 0, 0); }
[paint]{ //各雪を直径8ピクセルの円として描画する. clearAll(); setColor(255, 255, 255); for(var i=0; i < p.length; ++i){ fillOval(p[i], 8, 8); } }
[always]{ //マウスの移動方向をkakudoとして計算しておく var kakudo:Number = Math.atan2(mouse.y - preMouse.y, mouse.x - preMouse.x);
//各雪の移動の計算 for(var i=0; i < p.length; ++i){ //もし雪と岩があたっていたならば if(_root["iwa"].hitTest(p[i].x, p[i].y, true)){ // p[i].vel.y = 0; //雪の速度を止める(今はコメントアウトしているので止まらない,,ので,でもpushしないので結局ゆっくりと止まる) }else{//それ以外,つまり雪と岩があたっていないのなら p[i].push(kasoku[i], Math.PI/2); //雪を下方向にそれぞれが設定されている加速の定数で押す(落とす) } //マウスで振り払うための計算 var dist:Number = p[i].distanceTo(mouse); //雪の位置からマウスまでの距離を計算して dist = 30 - dist; //その値を30から引くと,距離0のものが「30」,遠くにいくに連れて値が下がる if(dist < 0) dist = 0; //値がマイナスのものは0にしておく. //この段階でdistには最近距離のものが30でマウスが離れるにしたがって値が下がり, //距離が30以上のときは0,という値が設定される. if(mouse.x != preMouse.x || mouse.y != preMouse.y){ //もしマウスが動いているならば p[i].push(dist*2, kakudo); //(マウスに近い雪をマウスの移動方向に動かす) }
//雪が画面から(下に)出てしまったときに,,, if(p[i].y > 400){ //画面の最上部のどこかに持ってきて,加速の定数を初期化する. p[i].x = random()*400; p[i].y = 0; kasoku[i] = random()*5+1; } } }
|