ActionScript Learning 110114

1.14.2011

Flahsでバネの動きを検証する。

摩擦とバネの力を調整することで動きの表現が変わってくる。

バネの初期座標を調整すると回転させることもできる。
黒い丸はドラッグ可能。

SAMPLE VIEW CODE


package {
	
	import flash.display.*;
	import flash.events.*


	public class NMain extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties

		private var _this:*;
		private var _stage:Stage;
		
		private var _main:MovieClip;
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NMain() {
			
			_this = this;
			_stage = stage;
			
			_stage.scaleMode = StageScaleMode.NO_SCALE;
			_stage.align = StageAlign.TOP_LEFT;
			
			Init();
		}
		
		
		//-------------------------------------------------------------------------------- Function
		 
		/**
		 * initialize
		 */
		public function Init():void {
			
			_main = new MovieClip();
			
			_this.addChild(_main);
			
			_main.x = Math.round(_stage.stageWidth / 2);
			_main.y = Math.round(_stage.stageHeight / 2);
			
			initmarus();
		}
		
		/**
		 * initialize main
		 */
		private var _m_0:MovieClip;
		private var _m_1:MovieClip;
		private var _m_2:MovieClip;
		private var mousedown:Boolean;
		private var mdown_posx:Number;
		private var mdown_posy:Number;
		
		private function initmarus():void {			
			
			_m_0 = new maru_0();
			_m_1 = new maru_1();
			_m_2 = new maru_2();
			
			_m_0.buttonMode = true;
			
			_m_1.vx = 0;
			_m_1.vy = 0;
			_m_2.vx = 0;
			_m_2.vy = 0;
			
			_main.addChild(_m_2);
			_main.addChild(_m_1);
			_main.addChild(_m_0);
			
			startmaruspos();
			
			_main.addEventListener(Event.ENTER_FRAME, marusaction);
			
			_m_0.addEventListener(MouseEvent.MOUSE_DOWN, m_0_mousedown);
			_stage.addEventListener(MouseEvent.MOUSE_UP, m_0_mouseup);
		}
		//
		private function m_0_mousedown(eo:* = null):void {
			
			mousedown = true;
			
			mdown_posx = _m_0.mouseX;
			mdown_posy = _m_0.mouseY;
		}
		//
		private function m_0_mouseup(eo:* = null):void {
			
			mousedown = false;
		}
		/** */
		private function startmaruspos():void {

			_m_0.x = 0;
			_m_0.y = 0;
			
			_m_1.x = _m_0.x - 200;
			_m_1.y = _m_0.y;
			
			_m_1.vx = 0;
			_m_1.vy = 100;
		}
		
		/**
		 * marus action
		 */
		private var m0_ease:Number = .4;
		private var m1_spring:Number = .2;
		private var m1_friction:Number = .8;
		private var m2_spring:Number = .4;
		private var m2_friction:Number = .6;
		
		private function marusaction(eo:* = null):void {

			if(mousedown) {
					
				_m_0.x += ((_main.mouseX - mdown_posx) - _m_0.x) * m0_ease;
				_m_0.y += ((_main.mouseY - mdown_posy) - _m_0.y) * m0_ease;	
			}

			_m_1.vx += (_m_0.x - _m_1.x) * m1_spring;  
			if(Math.abs((_m_0.x - _m_1.x)) > 60) _m_1.vx *= m1_friction;  
			_m_1.x += _m_1.vx;
			
			_m_1.vy +=(_m_0.y - _m_1.y) * m1_spring;  
			if(Math.abs((_m_0.y - _m_1.y)) > 60) _m_1.vy *= m1_friction;  
			_m_1.y += _m_1.vy;
			
			_m_2.vx += (_m_1.x - _m_2.x) * m2_spring;  
			if(Math.abs((_m_1.x - _m_2.x)) > 30)_m_2.vx *= m2_friction;  
			_m_2.x += _m_2.vx;
			
			_m_2.vy +=(_m_1.y - _m_2.y) * m2_spring;  
			if(Math.abs((_m_1.y - _m_2.y)) > 30) _m_2.vy *= m2_friction;  
			_m_2.y += _m_2.vy;
		}
	}
}

category : ActionScript / Flash

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category