// 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; } */ } } forked from: 流れ落ちる(flash as初心者なので、少々困惑中)