あしたから本気出す
いろいろ工作して情報発信してみる。自作キーボードとか。
開発ブログ
自作キーボード「TypingTrigger-SDZERO」
自作スマートフォン緊急充電器
プログラマブルな自動化キーボード実装編
プログラマブルな自動化キーボード(プロトタイプ編)を作ってみる-後編
開発ブログをもっと見る
ブログなど
ブログはこちら
ダウンロード
JW_WIN外部変形Kiefer
JW_WIN外部変形FastMeasure
お知らせ
2010/10/1 ブログを新しくした
2009/9/4 twitter始めた
2009/7/14 サイトのタイトル変更した

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


© GRAFZ.NET 2008-2010
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