forked from: 流れ落ちる(flash as初心者なので、少々困惑中)
各種基底クラスを読み込んでおきます
import flash.display.MovieClip;
import flash.display.Shape;//図を描くのに使うよflashの描画ツール系
import flash.display.Stage;//flashコンテンツが表示される領域全体を現す
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;//textFieldを制御する
フレームレートは60fps
ムービークリップを継承した、パブリッククラスnagareotiruです
flaファイルから見えるようにするよ。(public class:package外から見えるようにする(flaファイル含む))
// forked from tktr90755's 流れ落ちる
package
{
//各種基底クラスを読み込んでおきます
/*
import flash.display.MovieClip;
import flash.display.Shape;//図を描くのに使うよflashの描画ツール系
import flash.display.Stage;//flashコンテンツが表示される領域全体を現す
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;//textFieldを制御する
*/
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.filters.BlurFilter;
[SWF(frameRate="60",backgroundColor="#000000")] //フレームレートは60fps
//ムービークリップを継承した、パブリッククラスnagareotiruです
//flaファイルから見えるようにするよ。(public class:package外から見えるようにする(flaファイル含む))
public class nagareotiru extends MovieClip//ムービークリップの機能を引き継いだ上で、拡張しますよ~
{
//コンテナ:型はMovieClip※
private var container:MovieClip;
//▼プロパティの定義(クラス内の変数を定義)※プロパティをほかのクラスから呼び出せるようにするにはpublicを定義の先頭につける
//噴出位置とリミット位置
private var xLimit:Number;
private var yLimit:Number;
private var xAxis :Number;
private var yAxis :Number;
//色:9色をArrayに格納※今回使わない
//private var colors:Array = new Array("0xE89A0A", "0xE910DE", "0x0EEB10", "0xE9C010", "0xE2160F", "0xD6EB0B", "0xEB117C", "0xE81167", "0x7E11E8");
//クリックで切り替え:Boolean型→true or false型
private var clickFlag:Boolean = false;//clickFlagはfalse
//▼コンストラクタnagareotiru定義※必ず、publicとして定義する コンストラクタは戻り値を返さない
public function nagareotiru()
{
//
addEventListener(Event.ADDED_TO_STAGE, onAddedStage);//ADDED_TO_STAGE:ステージに追加イベント
}
//▼メソッドの定義※メソッドをほかのクラスから呼び出せるようにするにはpublicを定義の先頭につける
//onAddedStage:ステージ上に表示する関係
private function onAddedStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedStage);//ADDED_TO_STAGE:ステージに追加イベントを削除。ずっとEnterFrameし続けないように
stage.addEventListener (MouseEvent.MOUSE_DOWN, _onMouseDown);//マウスが押されている間、ステージ上にイベント
stage.addEventListener (MouseEvent.MOUSE_MOVE, _onMouseMove);//マウスが動いている間、ステージ上にイベント
container = new MovieClip();//ムービークリップ型の”container”というオブジェクトを作成(し、呼び出し)
addChild (container);//ステージ上にcontainerを表示
xLimit = stage.stageWidth * 2;//ステージの2倍の大きさまで
yLimit = stage.stageHeight * 2;//ステージの2倍の大きさまで
xAxis = stage.mouseX;//初期位置はステージ上のマウスの位置に
yAxis = stage.mouseY;//初期位置はステージ上のマウスの位置に
var textField:TextField=new TextField();//textFieldというTextField型のインスタンスを作成し、呼び出し
textField.text="クリックするといい事ある。マウス押したままうごかす。クリックするごとに動き方が変わる。";//textFieldに表示
textField.width=550;
textField.textColor=0xffffff;
addChild(textField);//ステージ上にtextFieldを表示
}
//_onMouseDown:マウス押される関係
private function _onMouseDown (e:Event):void
{
addEventListener(Event.ENTER_FRAME, _onEnterFrame);//エンターフレームイベント(ずっとイベント)
stage.addEventListener(MouseEvent.MOUSE_UP, _onMouseUp);//ステージ上で、MOUSE_UPイベント:マウス放すとなんかある(押してた状態から離した状態になったら)
clickFlag = ! clickFlag//初期値はfalseが入ってるね。これでfalseとtrueきりかえ。つまりマウス押されたらtrueになって放すと初期値falseに戻るんだね。
}
//_onMouseUp:マウス放す関係
private function _onMouseUp (e:Event):void
{
removeEventListener(Event.ENTER_FRAME, _onEnterFrame);//マウス押されてたときのエンターフレームイベント(ずっとイベント)をremove
stage.removeEventListener(MouseEvent.MOUSE_UP, _onMouseUp);//ステージ上で、MOUSE_UPイベント:マウス放すとなんかある(押してた状態から離した状態になったら)をremove
}
//_onMouseMove:マウス動かす関係
private function _onMouseMove (e:Event):void
{
xAxis = stage.mouseX;//位置はマウスの位置に追従
yAxis = stage.mouseY;//位置はマウスの位置に追従
}
//_onEnterFrame:エンターフレーム関係
private function _onEnterFrame(e:Event):void
{
createClip (container, xAxis, yAxis);//createClipという実行関数を作成(実行)してわたす引数は(container, xAxis, yAxis)
}
//createClipという関数の定義(引数は3つ↑あれに代入)
private function createClip (a:MovieClip, b:Number, c:Number):void
{
//ランダムな数値
//ランダムにすることで飛び散る
var value1:Number = Math.floor(Math.random() * 10);//0~9まで
var value2:Number = Math.floor(Math.random() * 10);//0~9まで
var value3:Number = Math.floor(Math.random() * 10);//0~9まで
/*ランダムにしないと飛び散らない
var value1:Number = 9;
var value2:Number = 9;
var value3:Number = 9;
*/
//速さ [X軸,Y軸,回転]
var xSpeed:Number = value1 - value2;//ランダムな値が入ってくるから、飛び散った感が出る
var ySpeed:Number = value3 -10;//必ず負の値になる
var ratationSpeed:Number =10;//回転スピードは10で固定
//マウスをクリックするたびに、飛び散りと流れ落ちが切り替わる
if (clickFlag)
{
xSpeed = value1 - value2;
ySpeed = value3 - 10;
ratationSpeed =10;
}
else
{
xSpeed = 1;
ySpeed = -10;
ratationSpeed =10;
}
//減速率 [X軸,Y軸,回転]
var xDeceleration:Number =0.98;//1以下にして原則するようにする。1以上にすると加速してどっかいく
var yDeceleration:Number = 0.98;//1以下にして原則するようにする。1以上にすると加速してどっかいく。ここをちょっと小さくすると、水の中っぽくなるね
var rotationDeceleration:Number = 0.98;//回転
//重力
var gravity:Number = 0.35;//ほんとの重力加速度は9.80665だけど、ここまで大きくしちゃうと、すぐおっこってちゃうから、小さめに。この部分を小さくすると水の中っぽくなるんで、上に飛び上がる分も大きくなる
var ms:Number = 0.98;
var sc:Number = 0.25;//
var sa:Number = 0.05 * Math.random ();//
//shape生成と
var shape:Shape = new Shape();//shapeという名前でデータ型はShapeでオブジェクト作成
a.addChild(shape);//変数aにshapeを追加→てかこの変数って、どこで使うの??????
//shape.graphics.beginFill(0xf00000 * Math.random());//色をランダムに※これだと、真っ赤とか、でない
shape.graphics.beginFill(0xffffff * Math.random());//これだと真っ黒から真っ白まででる。真っ赤もでる
shape.graphics.drawCircle(0, 0, 10);//半径10の円
shape.graphics.endFill();
shape.x = b;//shape.xにbを代入(bはcreateClipの引数) xAxis = stage.mouseX
shape.y = c;//shape.yにcを代入(cはcreateClipの引数) yAxis = stage.mouseY
shape.rotation = 30;//30度回転
shape.alpha=0;//透明:で出しが見えないように
shape.filters=[ new BlurFilter(10,10) ]//フィルターをかけてぼかす
shape.blendMode = "add";
//流れ落ちる動き
shape.addEventListener (Event.ENTER_FRAME,__onEnterFrame);//shapeオブジェクトにエンターフレームイベント
//shapeオブジェクトのエンターフレームイベントの関数定義
function __onEnterFrame (e:Event):void
{
shape.alpha=1;//シェイプは不透明に
xSpeed = xSpeed * xDeceleration;//スピードは、どんどん減速して、あまりx軸に対して広範囲には散らなくなる
ySpeed = ySpeed * yDeceleration + gravity;//スピードは、どんどん減速し。常に重力関数の影響を加算し続ける(var gravity:Number = 0.35)
ratationSpeed = ratationSpeed * rotationDeceleration;//
e.target.x = e.target.x + xSpeed;//イベントのx軸プロパティをターゲットに→直後の位置を代入し続ける
e.target.y = e.target.y + ySpeed;//イベントのy軸プロパティをターゲットに→直後の位置を代入し続ける
e.target.rotation = e.target.rotation + ratationSpeed;//
/*
var sc:Number = 0.25;//
var sa:Number = 0.05 * Math.random ();//
*/
sc = sc + sa;
//縮尺率
e.target.scaleX =4 * Math.sin (Math.PI * sc);
e.target.scaleY =0.5 * Math.cos (Math.PI * sc);
//もしイベントのx座標+100がxLimit(xLimit = stage.stageWidth * 2;//ステージの2倍の大きさまで)より大きいもしくは(yも同様に)の場合
if (e.target.x + 100 > xLimit || e.target.y + 100 > yLimit )
{
//イベントのアルファは
e.target.alpha = Math.round (yLimit - e.target.y);//Math.round小数点以下を四捨五入する
//もしイベントのアルファが0以下になったら
if (e.target.alpha<=0)
{
//エンターフレームイベントをremoveする
shape.removeEventListener (Event.ENTER_FRAME, __onEnterFrame);
//実行関数removeMC ()
removeMC ();
}
}
}
//関数removeMC ()の定義
function removeMC ():void
{
a.removeChild (shape);//aに追加したshapeをremoveする
}
}
//関数randomInt()の定義 引数(max:int,min:int)
/*
private function randomInt(max:int,min:int):int
{
//
var value:int = min + Math.floor(Math.random() * (max - min));
return value;
}
*/
}
}