忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Flashを作りました。掛かった時間はまあ3時間ぐらいですね。
一応物理の教科書を見ながらです。

このFlashはなんだか負荷がかかりまくるのでパソコンが止まってもいいという方のみ遊んでください。
多分大丈夫だけど。



一応説明すると。

今回は3つのファイルから出来ています。
hibanaMain.fla
hibanaMain.as
hibana.as

hibanaMain.flaとhibanaMain.asはセットです。

【hibanaMain.as】
package{
    import flash.events.*;//もうめんどいから全部インポート
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.EventDispatcher;
    import flash.display.DisplayObjectContainer;
    import flash.display.MovieClip;
    import hinoko;
   
    public class hinokoMain extends MovieClip{//表示させるのでMovieClipクラスをextendsする
        private var fireX:Number;//クリックした座標を格納する
        private var fireY:Number ;
        private var hinokoPiece:Number = 100;//出したい火花の数、任意です。
       
        public function hinokoMain(){
           
            tableMc.addEventListener(MouseEvent.CLICK,fire);//コンストラクタはこれだけ、クリックしたら下のスクリプトが発動する
        }
       
        private function fire(event:MouseEvent){
            trace("OKOKOKOKOKKKOKOKOKOKOKKKOKOKOKO");//動いてるか確かめ
            fireX = event.stageX;//イベントの引数より、イベントの発生位置を変数に格納
            fireY = event.stageY;
            var i:int;
            for(i = 0 ; i < hinokoPiece;i++){//Forループ飛ばしたい分だけループ
                var tobuMc:hinoko = new hinoko(fireX, fireY);//tobuMcというオブジェクト名でhinokoを生成,このオブジェクトの中に動かすスクリプトが書いてあるので、生成したら表示オブジェクトコンテナに加えるだけ。
                addChild(tobuMc);
            }
        }
    }
}







【hibana.as】

package{
        import flash.events.*;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.EventDispatcher;
    import flash.display.DisplayObjectContainer;
    import flash.display.MovieClip;
    import flash.utils.Timer;
    public class hinoko extends MovieClip{
       
        private var t:Number = 0;
        private var V:Number;//飛ばしたいものの速度を入れる、ここで値を入れてもいいし。ランダムにするなら下でランダムの値を入れる。
        //このスクリプトは表示したい分だけ発動するので、forループなどはあまりいらない。
        private var Vxo:Number;//Vから X成分と、Y成分に分ける
        private var Vyo:Number;
        private var dSeita:Number;//角度を格納
        private var G:Number = 8;//下向きの加速度
        private var A:Number = 2;//横向きの加速度
       
       
       
        private var hinokoMc:hinokoMC;//ところどころで操作できるように、グローバル定数としてhinokoを定義。
       
        public function hinoko(hX:Number, hY:Number){
            V = Math.random() * 10;//速度にランダムな値 * 10を代入
            dSeita = Math.random() * Math.PI;//角度を決める、これもランダム
            trace("===============================",dSeita);
            Vxo = (Math.cos(dSeita)) * V;//速度を分解
            Vyo = (Math.sin(dSeita)) * V;
            trace("Vx",Vxo);
            trace("Vy",Vyo);
            hinokoMc = new hinokoMC();//hinokoMcをここで生成
            hinokoMc.x = hX;//初期位置を引数から取ってくる。引数にはクリックした位置の座標が入ってる。
            hinokoMc.y = hY;
            addChild(hinokoMc);//表示させる
            if(Vxo > 0 ){
                A = -A;
            }else{
            }
            if(Vyo > 0 ){
                G = 0;
            }else{
            }
           
            var timer:Timer = new Timer(1000,10);//タイマーを設定、10秒経ったら表示させていたものを削除する。見えなくなったらもういたないから。処理食うから。
            timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerHandler);
            timer.start();
            hinokoMc.addEventListener(Event.ENTER_FRAME,onEnterFlame);
           
        }
       
        private function onEnterFlame(event:Event){
            t += 0.1;//再生されるたびに時間軸のtに0.1を足しておく。1だと速度が半端ない。
            //結構適当に計算させる
            if(Vxo != 0 ){//Vxoが0になるまで、ならなくてもいいんだけどね。
               
                if(Vxo > 0){//Vxoが + のとき(右に動くとき)
                    Vxo -= 0.1;//減速させる
                }else{
                    Vxo += 0.1;//Vxoが-のとき減速させる。
                }
               
            }else{
               
            }
           
            if(Vyo != 0 ){
                if(Vyo > 0){
                    Vyo -= 0.1;
                }else{
                    Vyo += 0.1;
                }
               
            }else{
               
            }
           
            hinokoMc.x += (Vyo * t) + (A * t * t)/2;//あえてばらばらに速度成分を入れていく、XとYを逆にするとか。
            hinokoMc.y += (Vxo * t) + (G * t * t)/2;//ちなみにこの式は物理の教科書にあるような V=VoT + 1/2at~2 てやつ
           
        }
       
        private function timerHandler(event:TimerEvent){
            trace("REMOVE");
            removeChild(hinokoMc);//タイマーが完了したら表示オブジェクトコンテナから削除
        }
       
    }
}



て感じ、これは実はミスから生まれた副産物だった。


PR
COMMENT FORM
NAME
TITLE
MAIL
URL
COMMENT
PASS secret
COMMENT
TRACKBACK
TB URL
カメラ持って、自転車ぶっとばして
HN:
mashoo
HP:
性別:
男性
趣味:
写真、自転車
自己紹介:
写真を撮ったり、自転車に乗ったりするのが好きです。
この頃は学校の友達と一緒に自転車に乗ってることが多いです。

カメラはOLYMPUSのE-3を使ってます。

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新コメント
[09/27 gaku]
[08/23 ghoul]
[08/20 ghoul]
リンク
忍者ブログ / [PR]
/ JavaScript by Customize in Ninja Blog / Template by 小龍的徒話