あしたから本気出す
利用価値のあるものを工作し、情報発信してみる。
工作
新・自作キーボード
Jw_cadの外部変形の作り方2
Jw_cadの外部変形の作り方
戦前のタイプライターをUSB化してみる。
工作記事をもっと見る
ブログ:最近やっていること
かっこいい電卓発見。
ノートPCのディスプレイが昇天ス
アルミのロウ付けに挑戦
ブログをもっと見る
ダウンロード
JW_WIN外部変形Kiefer
JW_WIN外部変形FastMeasure
お知らせ
2009/9/4 twitter始めました。
2009/7/14 サイトのタイトル変更しました
2008/4/30 サーバーダウンについて

管理者プロフィール (-)
GRAFZ.NET 27歳男
神奈川県生まれ
職業:GRAFZ.NETという屋号でプログラム制作してます。
一言:実用性を形にする。工作の日々。
コンタクトは以下までお願いします
suda@grafz.net
RSS
ブログをRSS配信してます。

最近やってること:
ŋ߂Ă邱
    follow me on Twitter

    © GRAFZ.NET 2008-2009
    6月6日
    虫の動きをスクリプトで記述する


    常に進行方向を向きながら回転する物体。その動きをスクリプトで記述してみます。動きをスクリプトで記述することのメリットは、パラメータを変えるだけで物の動きを制御できたり、また、手作業では不可能な動きを作り出せることもあることにあります。
    今回はこれ↓をプログラミングしてみましょう。
    flash player required. Get Adobe Flash player

    回転運動をする物体のクラスを作成し、引数で渡すMovieClipのonEnterFrameハンドラをつかまえて動きをつけます。回転運動の中心の座標と、回転確度も指定できるようにします。以下、クラスの記述です。
    class MyUnit{
      var mc:MovieClip;
      var nXCenter,nYCenter:Number;
      var nAngle:Number;
      var nCos,nSin:Number;
      function MyUnit(mcIn:MovieClip,nXCenterIn:Number,
          nYCenterIn:Number,nAngleIn:Number){
        this.mc = mcIn;
        this.nXCenter = nXCenterIn;
        this.nYCenter = nYCenterIn;
        this.nAngle = nAngleIn;

        this.nCos = Math.cos(this.nAngle);
        this.nSin = Math.sin(this.nAngle);

        var owner:Object = this;
        this.mc.onEnterFrame = function(){owner.McOnEnterFrame();}
      }
      function McOnEnterFrame(){
        var nX:Number = this.mc._x - this.nXCenter;
        var nY:Number = this.mc._y - this.nYCenter;
        var nXNew:Number = nX * this.nCos - nY * this.nSin + this.nXCenter;
        var nYNew:Number = nX * this.nSin + nY * this.nCos + this.nYCenter;
        this.mc._rotation = (180 / Math.PI) *
          Math.atan2(nYNew - this.mc._y,nXNew - this.mc._x);
        this.mc._x = nXNew;
        this.mc._y = nYNew;
      }
    }
    1行目:MyUnitという名前でクラスを作成します。もちろん何でも構いません。
    2行目:回転運動をさせるMovieClip。そして、
    3行目:(回転の)中心座標、
    4行目:フレームあたりの回転確度。これらをコンストラクタの引数で受け取ります。
    5行目:回転の計算に使用する変数。13-14行目で計算し、22-23行目で使用します。
    6-7行目:ここからコンストラクタの記述。
    8-11行目:受け取った引数をプロパティに格納します。
    13-14行目:回転の計算に使用する変数。22-23行目で使用します。
    16行目:MovieClipのスコープからクラスのメソッドにアクセスするための変数。
    17行目:onEnterFrameハンドラをオーバーライドします。19行目からのメソッドを実行します。
    19行目:onEnterFrameハンドラで実行されるメソッド。
    20-23行目:回転の計算。計算式の詳細は割愛させてください。たしか高校の数学でやった気が。
    24-25行目:MovieClipが進行方向を向くようにします。atan2が便利。
    26-27行目:MovieClipの新しい位置を代入。

    そして、このクラスのオブジェクトを生成する記述は以下。
    var oUnit:Object = new MyUnit(this.mcUnit,Stage.width * 0.5,Stage.height * 0.5,0.1);
    mcUnitというのは、回転させる対象のMovieClip。回転の中心は、ステージの中心を指定します。回転確度の単位はここではラジアン。度数にしたい場合は、(度数)*(Math.PI / 180)を引数で渡せばOK。

    動きを決定する要素にランダムな数値を加えてやることで、生命感のある飽きさせない動きなども表現できるかもしれません。そのようなことは、スクリプト制御だからこそ可能な表現ですね。

    ご参考になれば嬉しいです。m( __ __ )m