PhysicalPointクラス(1)

| コメント(0) | トラックバック(0)

物理法則をクラス化した「PhysicalPoint」クラス。
AS3用クラスとして本に紹介されていたものをAS2(Flash8以上)に移植してみた。
「setKasokudo」メソッドでxyのターゲットまでの加速度、空気抵抗を設定すると、現在のx座標とy座標を返してくれる。

参考資料『SoftBank Creative「Flash デザインラボ CaseStudy11 古堅真彦 著」』

以下、コード。
「PhysicalPoint.as」

import flash.geom.Point;
class PhysicalPoint extends Point{
 //プロパティ
 var vx,vy:Number;//速度
 private var ax,ay:Number;//加速度
 var resistance:Number;//空気抵抗
 var preTime:Number;//前回のミリ秒
 var curTime:Number;//今回のミリ秒
 //コンストラクタ
 public function PhysicalPoint(xx:Number,yy:Number,resist:Number){
  x=xx;
  y=yy;
  resistance=resist;
  vx=0;
  vy=0;
  ax=0;
  ay=0;
  preTime=new Date().getTime();
  
  setInterval(this,'loop',33);
 }
 //メソッド
 function loop():Void{
  curTime=new Date().getTime();
  var t:Number=(curTime-preTime)/1000;
  //x,yの座標
  x+=vx*t+0.5*ax*t*t;
  y+=vy*t+0.5*ay*t*t;
  //速度計算
  vx+=ax*t;
  vy+=ay*t;
  //空気抵抗適用
  vx*=resistance;
  vy*=resistance;
  //加速度を0に戻す
  ax=0;
  ay=0;  
  preTime=curTime;
 }
 function setKasokudo(aax:Number,aay:Number):Void{
  ax+=aax;
  ay+=aay;
 }
}

これの面白いところは、無機質なイージングなどと違って、物理法則にのっとっているため、ユーザに親近感を覚えさせるところ。このクラスを使って、簡単なサンプルを作ってみた。

FLASH PLAYER

Get Adobe Flash player

 【製作過程】

画面サイズは300x300。
「PhysicalPoint.as」と同階層にflaファイルをつくり、以下のコードをタイムライン弟1フレームに記述。

var pt:PhysicalPoint=new PhysicalPoint(Stage.width/2,Stage.height/2,0.9);
setInterval(loop,33);
function loop():Void{
 pt.setKasokudo((_root._xmouse-pt.x)*10,(_root._ymouse-pt.y)*10);
 clear();
 _root.lineStyle(3,0xFF0000);
 _root.moveTo(0,0);
 _root.lineTo(pt.x,pt.y);

トラックバック(0)

トラックバックURL: http://www.ayabin.jp/mt5/mt-tb.cgi/181

コメントする

このブログ記事について

このページは、webmasterが2009年7月 7日 12:57に書いたブログ記事です。

ひとつ前のブログ記事は「クラス(1)」です。

次のブログ記事は「SpinTextクラス」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。