In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Ball

ボールを投げ遊ぶサンプル
Get Adobe Flash player
by hole 28 Dec 2008
// forked from clockmaker's code on 2008-12-17
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
         import flash.filters.*;

	
	/**
	 * ボールを投げ遊ぶサンプル
	 */
	public class Main extends Sprite
	{
		private var ball:Sprite;
		private var zanzo:Array = new Array(10);
		private var vx:Number = 0;
		private var vy:Number = 0;
		private var oldX:Number;
		private var oldY:Number;
		private var flag:Boolean = false;	
		private var idx:int = 0;
		

		/**
		 * コンストラクター(実行時にはじめに実行される関数)
		 */
		public function Main()
		{
			// フレームレートを設定
			stage.frameRate = 60;
			

			for (var i: int = 0; i < 10; i ++) {
				zanzo[i] = new Sprite();
				zanzo[i].x = 0;
				zanzo[i].y = 0;
				zanzo[i].graphics.beginFill(0xff9999, 1);
				zanzo[i].graphics.drawCircle(0, 0, 50);
				this.addChild(zanzo[i]);
			}

			// ボールを作成
			ball = new Sprite();
			ball.graphics.beginFill(0xff9999, 1);
			ball.graphics.drawCircle(0, 0, 50);
			this.addChild(ball);
			
			// インタラクティブの設定
			ball.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
			ball.addEventListener(MouseEvent.MOUSE_UP, upHandler);
			this.addEventListener(Event.ENTER_FRAME, enterHandler);
			var filter:BitmapFilter=getFilter();
			var myFilters:Array=new Array();
			myFilters.push(filter);
			ball.filters=myFilters;
		}


		private function getFilter():BitmapFilter {
			var filter:GlowFilter=new GlowFilter();
			filter.color   =0xff0000;//グローの色
			filter.alpha   =0.6;    //カラーの透明度
			filter.blurX   =20;      //水平方向のぼかし量
			filter.blurY   =20;      //垂直方向のぼかし量
			filter.strength=1;       //インプリントやスプレッドの長さ
			filter.quality =BitmapFilterQuality.HIGH;//フィルタを適用する回数
			filter.inner   =false//true - 内側、false - 外側
			filter.knockout=false;   //ノックアウト効果の有無
			return filter;
		}

		
		/**
		 * ボールを押したときの処理です
		 */
		private function downHandler(e:MouseEvent):void 
		{
			// マウスの位置を保存
			oldX = this.mouseX;
			oldY = this.mouseY;
			
			// ドラッグを開始
			ball.startDrag(true);
			
			// ボールの速度を無効にする
			flag = true;
		}
		
		/**
		 * ボールからマウスを離したときの処理です
		 */
		private function upHandler(e:MouseEvent):void 
		{
			// ボールの速度を有効にする(ドラッグした距離に応じて、速度を設定)
			vx = this.mouseX - oldX;
			vy = this.mouseY - oldY;
			
			// ドラッグを解除
			ball.stopDrag();
			
			// ボールの速度を無効にする
			flag = false;
		}
		
		/**
		 * フレーム毎に実行される処理です(アニメーション用途で設定しています)
		 */
		private function enterHandler(e:Event):void 
		{
			// ボールをドラッグ中はアニメーションを無効化
			if (flag) {
				for (var i: int = 0; i < 10; i ++) {
					zanzo[i].visible = false;
				}
				return;
			}
			for (var i: int = 0; i < 10; i ++) {
				zanzo[i].visible = true;
			}
			zanzo[idx].x = ball.x;
			zanzo[idx].y = ball.y;
			zanzo[idx].alpha = 0.2;
			idx ++;
			if (idx == 10) idx = 0;
			for (var i: int = 0; i < 10; i ++) {
				zanzo[i].alpha -= 0.02;
			}
			
			//重力
			vy += .5; 
			
			// 摩擦
			vx *= 0.97; 
			vy *= 0.97;
			
			// ボールに物理演算を適用
			ball.x += vx; 
			ball.y += vy;
			
			// 画面の端からはみ出さないようにする処理
			if(ball.x + ball.width/2 > stage.stageWidth)
			{
				ball.x  = stage.stageWidth - ball.width / 2;
				vx *= -0.7;
			}
			else if(ball.x - ball.width/2 < 0)
			{
				ball.x  = 0 + ball.width / 2;
				vx *= -0.7;
			}
			if(ball.y + ball.height / 2 > stage.stageHeight)
			{
				ball.y  = stage.stageHeight - ball.height / 2;
				vy *= -0.7;
			}
			else if(ball.y - ball.height / 2 < 0)
			{
				ball.y  = + ball.height / 2;
				vy *= -0.7;
			}
		}
	}
}