リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ トンボサンプル

ActionScript

トンボサンプル

Adobe Flash CS3 詳細!ActionScript3.0入門ノート 大重美幸 著のサンプルを参考にしたサンプル。flashファイルに矢印のインスタンスを配置し、カスタムクラスで動きを設定。

JavaScriptを有効にし、最新のFlashPlayerをインストールお願いしますGet Adobe Flash player


Tombo.as(カスタムクラス)

package{
	import flash.display.MovieClip;
	import flash.geom.Point;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	public class Tombo{
		//プロパティ
		var tombo_mc:MovieClip;
		var spotList:Array;
		var index:int=-1;//spotList用index ※0は使用するかもしれない為避ける
		var spot:MovieClip;
		var tmpX:Number;//楕円の中心
		var tmpY:Number;//楕円の中心
		var tmpR:uint;//楕円の半径
		var dg:uint;//spotとtombo_mc角度
		var r:uint;//spotとbombo_mcの距離
		const SPEED:Number = 10;//楕円の中心移動スピード
		
		//コンストラクタ
		public function Tombo(myMc:MovieClip,...myArray:Array){
			tombo_mc = myMc;
			spotList = myArray;
			init();
		}
		
		//初期化
		function init():void{
			index = randomIndex(spotList,index);//別のinde No設定メソッド
			spot = spotList[index];//ムービークリップの代入
			tmpX = tombo_mc.x;
			tmpY = tombo_mc.y;
			
			//spotとtombo_mc角度計算
			dg = Math.round( (Math.atan2(spot.y-tombo_mc.y,spot.x-tombo_mc.x)*180/Math.PI+360) % 360 );
			
			//Pointクラスでx,y座標代入
			var tomboPt:Point = new Point(tombo_mc.x,tombo_mc.y);
			var spotPt:Point = new Point(spot.x,spot.y);
			
			//spotとbombo_mcの距離rを求める
			r = Point.distance(tomboPt,spotPt);
			
			tombo_mc.addEventListener(Event.ENTER_FRAME,flyStep);
		}
		
		//別のinde No設定メソッド
		function randomIndex(myArray:Array,myInt:int):int{
			var i:int;
			do{
				i = Math.floor(Math.random()*myArray.length);
			}while (i == myInt) //iがindexNoと同じなら繰返し
			return i;

			//参考 再起呼び出し法を使った場合
//			var i:int;
//			i = Math.floor(Math.random()*myArray.length);
//			if(myInt == i){
//				return arguments.callee(myArray,myInt);//自身を呼び出すメソッド
//			}else{
//				return i;
//			}
		}
		
		//クルクル回って先端に止まる
		function flyStep(e:Event):void{
			
			//楕円の中心位置を移動
			tmpX += (spot.x - tmpX) / SPEED;
			tmpY += (spot.y - tmpY) / SPEED;
			
			dg = (dg+15) % 360;
			
			if(r>0){
				r *=0.95;//uint型である為いずれは0になる
				
				//楕円半径を徐々に大きく、徐々に小さく
				if(r>tmpR){
					tmpR +=(r-tmpR) * 0.05;
				}else{
					tmpR =r;
				}
				
				//参考 停止位置がずれてもよければ
//				tmpR +=(r-tmpR) / 10;
			
				//楕円
				tombo_mc.x = Math.cos(dg * Math.PI/180) * tmpR * 2 + tmpX;
				tombo_mc.y = Math.sin(dg * Math.PI/180) * tmpR + tmpY;
				
				tombo_mc.rotation = dg;
			}else{
				tombo_mc.removeEventListener(Event.ENTER_FRAME,flyStep);
				tombo_mc.addEventListener(MouseEvent.ROLL_OVER,tomboRollOver);
			}
		}
		
		function tomboRollOver(e:MouseEvent){
			tombo_mc.removeEventListener(MouseEvent.ROLL_OVER,tomboRollOver);
			init();
		}
	}
}


メインタイムラインのアクションフレーム

var tomboObj:Tombo = new Tombo(tombo_mc,spot1_mc,spot2_mc,spot3_mc,spot4_mc);


サンプルをダウンロード

last update 2009.8.7
参考・出典等
「Adobe Flash CS3 詳細!ActionScript3.0入門ノート 大重美幸 著」

▲page top

topmemogalleryblogtestaboutlinksmail
Copylight(C)2008-2009 Riptac. All Rights Reserved.