上下に波打つ円

by kamip
上下に波打つ円のサンプル@kamip
http://d.hatena.ne.jp/kamip/
♥0 | Line 62 | Modified 2009-09-10 16:09:38 | MIT License
play

ActionScript3 source code

/**
 * Copyright kamip ( http://wonderfl.net/user/kamip )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/nNTx
 */

package {
    //上下に波打つ円のサンプル@kamip
    //http://d.hatena.ne.jp/kamip/
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
    import net.hires.debug.Stats;

	[SWF(backgroundColor="0xffffff", width="465", height="465", frameRate="100")]

	public class UpBall extends Sprite {
		
		//stageの中心点
		private var _center_x:Number = stage.stageWidth / 2;
		private var _center_y:Number = stage.stageHeight / 2;
		
		//周りを回ってる円のSprite
		private var _moveCircle:Sprite = new Sprite();
		private var _moveCircle_x:Number = 0;
		private var _moveCircle_y:Number = 0;
		
		//ブレ幅
		private var _radius:Number = 0;
		//ブレスピード
		private var _degree:Number = 0;
		//弧度
		private var _radian:Number = 0;
		
		//波打つ判定
		private var _type:Boolean = true;
		
		//波打つ方向
		private var _right:Boolean = true;
		
		public function UpBall() {
			init();
		}
		private function init():void {
			
			//とりあえずaddChild
			this.addChild(_moveCircle);
			
			//カッコイイやつを付ける
            addChild(new Stats());
			
			//周りを回ってる円のSprite(非動的なパラメーターはここで指定
			_moveCircle.graphics.beginFill(0xff58e5, 1);
			_moveCircle.graphics.drawCircle(0, 0, 5);
			_moveCircle.graphics.endFill();
			
			//毎フレームごとにイベントを発生させる
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			
		}
		
		//毎フレームごとに発生するイベント
		private function onEnterFrame(e:Event):void {
			//円を描く計算式をy軸だけ取得する
			_radian = Math.PI / 180 * _degree;
			_moveCircle_y = _radius * Math.sin(_radian) + _center_y;
			
			//取得したy座標に円を移動する
			_moveCircle.y = _moveCircle_y;
			
			//_degreeの数値を大きくすれば早く動く
			if ( _type == true) {
				_degree += 3;
			}
			
			//stageの端の折り返し処理
			if ( _moveCircle.x == 460 ) {
				_right = false;
			}else if ( _moveCircle.x == 5 ) {
				_right = true;
			}
			
			// ブレ幅をランダムで変更
			if ( _moveCircle.y == _center_y ) {
				_radius = getRandom();
			}
			
			//x軸の方向設定
			if ( _right == true ) {
				_moveCircle.x += 1;
			}else {
				_moveCircle.x -= 1;
			}
		}
		
		//マウスでクリックされたら逆回転になる
		private function onMouseDown(e:MouseEvent):void {
			if ( _type == false ) {
				_type = true;
			}else {
				_type = false;
			}
		}
		
		//ランダムfunction
		private function getRandom():int {
			return Math.round( Math.random() * 250 + 1);
		}
	}

}