リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ クリックで跳ねるインスタンス

ActionScript

クリックで跳ねるインスタンス

ライブラリの埋め込みアセットシンボルのインスタンスを配置し、クリックで跳ねる動作をするカスタムクラスのサンプル。

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


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

package {
	import flash.display.MovieClip;
	import flash.utils.getTimer;
	import flash.events.Event;

	public class Unit {

		//プロパティ
		public var body:MovieClip;
		var X:Number;//オブジェクト位置
		var Y:Number;//オブジェクト位置
		var eventFlag:Boolean;//イベント発生中「true」否「false」
		var time:int;//測定開始時間(mmSec)
		var timeTop:int;//ジャンプ時間(mmSec)
		var timeStart:int;//イベント開始時間(mmSec)
		var timeNow:int;//イベント開始からの経過時間
		var lengJump:int;//ジャンプ高さ

		//コンストラクタ
		public function Unit(newX:int,newY:int) {
			body=new SampleBody();
			X = newX;
			Y = newY;
			body.x = X;
			body.y = Y;
		}

		//時間測定メソッド
		public function timeScale(type:String) {
			if (type == "mouseDown") {//type→ mouseDown? mouseUP?
				time = getTimer();
			} else {
				var newTime = getTimer()-time;//ジャンプ時間=プレス時間で試し
				var length = getTimer()-time;//ジャンプ高さ=ジャンプ時間で試し
			}

			//次のステップへの判定
			if (eventFlag ==false ) {
				eventFlag = true;//イベント発生
				inter(newTime,length);//連続ジャンプに対応で、メソッド変更
			}
		}

		//プロパティ代入(連続ジャンプ対応)とジャンプイベントへ
		function inter(time:int,length:int) {
			timeTop = time;//ジャンプ時間
			lengJump = length;//ジャンプ高さ
			timeStart = getTimer();//イベント開始時間
			body.addEventListener(Event.ENTER_FRAME,jumpAction);//エンターフレーム
		}

		//ジャンプイベント(エンターフレーム)
		function jumpAction(e:Event) {
			timeNow = getTimer()-timeStart;//イベント発生からの経過時間

			//高さ計算
			if (timeNow < timeTop) {//上昇中
				//高さ=頂点までの高さ*√(1-(1-経過時間/頂点までのジャンプ時間)^2) ※円の動きで代用
				body.y = -Math.floor(lengJump * Math.sqrt( 1-Math.pow(1-timeNow/timeTop,2)))+Y;
			} else if (timeNow < timeTop * 2) {//下降中
				//高さ=頂点までの高さ*√(1-(下降開始〜経過時間/下降開始〜着地までの到着時間)^2)
				body.y = -Math.floor(lengJump * Math.sqrt( 1-Math.pow((timeNow-timeTop)/timeTop,2)))+Y;
			} else {//着地
				body.y = Y;
				eventFlag = false;//イベント終了
				body.removeEventListener(Event.ENTER_FRAME,jumpAction);//エンターフレーム解除
			}
		}

		//消去メソッド
		public function remove() {
			var main:Main=body.parent  as  Main;
			main.removeChild(body);
		}
	}
}


Main.as(ドキュメントクラス)

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	//ドキュメントクラス
	public class Main extends Sprite {

		//プロパティ
		private var sampleBody:Unit;

		//コンストラクタ
		public function Main() {
			setBody();
		}

		//インスタンス生成と配置
		function setBody() {
			sampleBody = new Unit(275,750);			
			addChild(sampleBody.body);
			stage.addEventListener(MouseEvent.MOUSE_DOWN,buttonAction);
			stage.addEventListener(MouseEvent.MOUSE_UP,buttonAction);
		}
		
		//マウスが押されたメソッド
		function buttonAction(e:MouseEvent):void{
			sampleBody.timeScale(e.type);//mouseDown? mouseUP?
		}
	}
}


サンプルをダウンロード

last update 2009.7.31
参考・出典等
「特に無し」

▲page top

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