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

つみふら (How do you like flash?)

@OKASUKE
* 2010/4/24 #Geeks67をみてやっぱFlash好きだなーと思いつつ
* つみふら(How do you like flash?)
* 100回以上クリックすればFlash愛情度がわかるらしい
* 連打するもよし、慎重にクリックするもよし!
* 詳しくは終了後twitterへ
* (100回以上クリックすればボタンがでます。)

* たまに
* http://twitpic.com/1i0lvc になりますが、えっと…た、高く積み上げる
* ための…し、仕様デス!(逃亡)
* 物理エンジン・・・あうあ(ノД`)・゜・。
Get Adobe Flash player
by OKASUKE 19 Oct 2010
/**
 * Copyright OKASUKE ( http://wonderfl.net/user/OKASUKE )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/kcii
 */

/*
* @OKASUKE
* 2010/4/24 #Geeks67をみてやっぱFlash好きだなーと思いつつ
* つみふら(How do you like flash?)
* 100回以上クリックすればFlash愛情度がわかるらしい
* 連打するもよし、慎重にクリックするもよし!
* 詳しくは終了後twitterへ
* (100回以上クリックすればボタンがでます。)

* たまに
* http://twitpic.com/1i0lvc になりますが、えっと…た、高く積み上げる
* ための…し、仕様デス!(逃亡)
* 物理エンジン・・・あうあ(ノД`)・゜・。
*/
package {

	import alternativ5.engine3d.materials.*;
	import alternativ5.engine3d.core.*;	
	import alternativ5.engine3d.materials.FillMaterial
	import alternativ5.engine3d.primitives.Box;
	import alternativ5.engine3d.primitives.Plane;
	import alternativ5.engine3d.core.Sprite3D;
	import alternativ5.types.Texture;
	import alternativ5.types.Point3D;
	import alternativ5.utils.MathUtils;	
	
	import flash.display.Sprite;	
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.BlendMode;
	import flash.geom.Matrix;	
	import flash.net.*;
    import flash.system.*;		
	import flash.text.TextField;
         import flash.text.TextFormat;
	import flash.utils.escapeMultiByte;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.events.Event;
	import flash.events.MouseEvent;

	import alternativ5.utils.FPS;
	import com.bit101.components.*;	

	[SWF(width = 465, height = 465, frameRate = 40)]	
	public class Main extends Sprite {

		private var _ball:Vector.<Ball> = new Vector.<Ball>;
		private var template:BasicTemplate = new BasicTemplate();
		private var _count:Number;
		private var _prevball:Ball;
		private var _data:Array;
		private var image:BitmapData;
		private var flasan:BitmapData
		private var loader:Loader;	
		private var _fla:TextField;
		private var _ochifla:TextField;
		private var _ochi:Number = 0;
		private var delno:Number = 0;
		private var myTimer:Timer = new Timer(5000, 1);

		public function Main():void {
			loader = new Loader();
			loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/c/c2/c2c2/c2c21a50b73c055320ce2408ed43699ac6fc342e"), new LoaderContext(true));
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded2);	
			
			_fla = new TextField(); 
            _fla.text = "0/100" + " "; 
            _fla.x = 10; 
            _fla.y = 10; 
            addChild(_fla);
            _fla.selectable = false; 
			
			_ochifla = new TextField();
			_ochifla.text = "落ちたfl: " + "??" + "fl";
			
			_ochifla.x = 80; 
            _ochifla.y = 10; 
            addChild(_ochifla);
            _ochifla.selectable = false;			
		}
		
		private function loaded2(e:Event):void {
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loaded2);
			flasan = new BitmapData(loader.content.width, loader.content.height, true);
			flasan.draw(loader);
			
			loader = new Loader();
			loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/b/b6/b611/b61189e180c5fa3e3824c9b3f67d06f3a90253ae"), new LoaderContext(true));			
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);			
		}
		
		private var box:Object3D
		public var plane:Plane;
		private function loaded(e:Event):void {
			
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loaded);
			image = new BitmapData(loader.content.width, loader.content.height, true);
			image.draw(loader);
			// テンプレートを作成			
			addChild(template);
			FPS.init(stage); 
			var matimage:TextureMaterial = new TextureMaterial(new Texture(image), 1, false, true, BlendMode.NORMAL, -1, 0xFF0000);
            matimage.precision = TextureMaterialPrecision.VERY_LOW;
			
			plane=new Plane(400,400,8,8)
			plane.cloneMaterialToAllSurfaces(new FillMaterial(0xFFFFFF,0.1,BlendMode.NORMAL,0,0x000000));
			plane.setMaterialToSurface(matimage, "front");
			
			template.scene.root.addChild(plane); 
		
			plane.rotationX = MathUtils.toRadian(90)
			plane.y = 400
			plane.x = this.width / 2;
			box = new Object3D()
			template.scene.root.addChild(box); 		

			onResize(null);
			this.stage.addEventListener(Event.RESIZE, onResize);
			_count = 0;		
			this.stage.addEventListener(MouseEvent.CLICK, onMouseClick);		
		
			template.onPreRender = function():void {		
				
				if (_count >= 0) endcnt();
				
				var rateY:Number = mouseY / stage.stageHeight;				
				template.camera.y += ( - 8000 * rateY - template.camera.y) * 0.01;						
				template.cameraContoller.lookAt(new Point3D());				
			}
			
			function onResize(e:Event):void	{
				this.width = stage.stageWidth;
				this.height = stage.stageHeight  				
				
				var bgMatrix:Matrix = new Matrix();
				bgMatrix.rotate(90 * Math.PI / 180);
				graphics.clear();				
				graphics.beginGradientFill("linear", [0xFFFFFF, 0x0000FF], [1, 0], [127, 255], bgMatrix);
				graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			}
		
			function onMouseClick(e:MouseEvent):void {
				
				createBall();				
			}
			
			var me:Main=this //as Main;
			function createBall():void {					
				if (_count >= 100) {
					if (button != null) return;
					
					myTimer.start(); 

					//myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
					myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler);

					
					return;
				}
				
				_ball.push(new Ball(me, template.scene, box, 100, 100, 100, flasan, _count));			
				_count += 1;
				_fla.text = _count + "/100 ";
			}
			
			function completeHandler(e:TimerEvent):void {
				TwitterGo(n);
			}

		}
		
		private var n:Number = 0;
		private function endcnt():void {
			//if (_count >= 100) {					
				n = 0;
				for (var i:Number = 0; i < _ball.length - 1; i++) {
					if (_ball[i].coords.y >= 400) {
						n += 1
					}
				}				
				//_ochifla.text = "Falling flash : " + (n) + "fl"
				_ochifla.text = "Falling flash : " + "???" + " fl"
				return					
			//}			
		}		
		
		//参考 http://wonderfl.net/c/uUEA
		// twitterのurl
		private var twitter	:String = "http://twitter.com/home?status=";		
		// メッセージ
		private var message	:String = "post message";		
		// 誘導したいurl
		private var targetURL:String = "http://wonderfl.net/c/kcii";		
		// ハッシュタグ
		private var hashTag	:String =  "%23wonderfl"		
		// ボタン
		private var button:PushButton;		
		
        private function TwitterGo(test:Number):void {
			
			message = "あなたは" + test + "フラを奈落の底に落としました・・・" + "flash愛情度" + (100-test) + "%"
        	button = new PushButton( this, 340, 15, "twitter")
			addChild(button);
	        button.addEventListener( MouseEvent.CLICK, clickHandler );
        }		
		/**
		 * クリック
		 * @param	e
		 */
        private function clickHandler( e:MouseEvent ):void {
	        postTweet();
        }        
		/**
		 * Twitterのサイトに行き、ポストする用意をする。
		 */
		private function postTweet():void {
			navigateToURL( new URLRequest( twitter + escapeMultiByte( message ) + " " + targetURL + " " + hashTag ) );
		}		
	}
}

import alternativ5.engine3d.core.Mesh;
import alternativ5.engine3d.primitives.Plane;
import alternativ5.engine3d.primitives.Box;
import alternativ5.types.Set;
import alternativ5.engine3d.physics.Collision
import alternativ5.engine3d.physics.EllipsoidCollider
import alternativ5.types.Point3D;
import alternativ5.engine3d.materials.TextureMaterial;
import alternativ5.types.Texture;

import flash.geom.Point;
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.text.TextField;

class Ball extends Box {

	private var collider:EllipsoidCollider;
	
	//private var collider2:EllipsoidCollider;
	

	private var collision:Collision;

	private var nowPoint:Point3D;			//現在の位置
	private var newPoint:Point3D;			//移動位置
	private var speed:Point3D;				//スピード
	private var deceleration:Number;		//跳ね
	private var acceleration:Point3D;		//加速

	private var tempPoint:Point3D;
	private var _pball:Ball;
	public var _cnt:Number=0;
	
	private var box:Ball;
	private var parent3D:Object3D;
	private var parentMc:Sprite;	
	
	private var ochita:TextField;

         private var tempBall:Mesh;
		
	public function Ball(mc:Sprite, scene:Scene3D, mc3D:Object3D, w:Number, h:Number, l:Number, img:BitmapData, cnt:Number = 0 ) {
		super(w,h,l);
			
		parentMc=mc
		parent3D = mc3D		
		_cnt = cnt;					
		this.cloneMaterialToAllSurfaces(new TextureMaterial(new Texture(img),1,false,true));
		parent3D.addChild(this);
		
		tempPoint= new Point3D();		
		newPoint = new Point3D();
		nowPoint = new Point3D (0, -800 - (120 * _cnt), 0);	
		this.coords = nowPoint;
		speed=new Point3D();					//スピード
		deceleration = 0.1;						//減速
		
		//どうっすかなー。。		
		var n:Number = 0;
		if (Math.random() * 10 >= 5) {
			n = 0.01
		} else {
			n = -0.01
		}
		
		acceleration=new Point3D(n,0.3,0);		//加速	
		//衝突判定に使う球の作成
		collider = new EllipsoidCollider (scene,w/2,h/2,l/2);
		collision = new Collision();
		collider.collisionSet=new Set()

		speed = new Point3D();
	
		parentMc.addEventListener(Event.ENTER_FRAME, onRenderTick);
				
	}

	//public function init():void {
		//スピードの初期化
		//speed = new Point3D();
		//位置の初期化
		//nowPoint = new Point3D (0, -800 - (100 * _cnt), 0);		
	//}
		
	private function onRenderTick(e:Event):void {
		speed.add(acceleration);

		//何かに衝突したかどうかをcheckし、真なら衝突情報をcollisionに返す
		if (collider.getCollision (nowPoint, speed, collision)) {
			//if (tempBall != collision.face.mesh) {
				//tempBall=collision.face.mesh
			
				//衝突方向と進行方向の内積をとり、新たな方向を割り出す。
				tempPoint=collision.normal
				tempPoint.multiply(2 * Point3D.dot(tempPoint, speed));
				speed.subtract(tempPoint);
				speed.multiply(deceleration);
			//} else {
			//	collider.calculateDestination(nowPoint, speed , newPoint);
				
			//}
		} else {
			//現在地(nowPoint)から移動分(speed ベクトル)を移動させ、衝突を判定した上で、新しい移動座標をdestinationPointに返します
			collider.calculateDestination(nowPoint, speed ,newPoint);
		}	
		
		nowPoint.copy(newPoint);
		this.coords = nowPoint;
		
		if (this.nowPoint.y >= 8000) {							
			del();
		}	
		//this.rotationY += 0.1 * Math.PI / 180;		
	}
	private function del():void {
		parentMc.removeEventListener(Event.ENTER_FRAME, onRenderTick);
		parent3D.removeChild(this);
		delete this;
	}
}







//////////////////////////////////////////////////////////////////////////////////

/**
 * BasicTemplate for Alternativa3D
 * Alternativa3Dを扱いやすくするためのテンプレートです
 * @author Yasu
 */
import alternativ5.engine3d.controllers.CameraController;
import alternativ5.engine3d.core.Camera3D;
import alternativ5.engine3d.core.Object3D;
import alternativ5.engine3d.core.Scene3D;
import alternativ5.engine3d.display.View;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.events.Event;

import alternativ5.engine3d.materials.FillMaterial
class BasicTemplate extends Sprite{
	/**
	 * シーンインスタンスです。
	 */
	public var scene:Scene3D;
	/**
	 * ビューインスタンスです。
	 */
	public var view:View;
	/**
	 * カメラインスタンスです。
	 */
	public var camera:Camera3D;
	/**
	 * カメラコントローラーです。
	 */
	public var cameraContoller:CameraController;
	
	private var _viewWidth:int;
	private var _viewHeight:int;
	private var _scaleToStage:Boolean;

	/**
	 * 新しい BasicTemplate インスタンスを作成します。
	 * @param	viewWidth
	 * @param	viewHeight
	 * @param	scaleToStage
	 */
	public function BasicTemplate(viewWidth:int=640, viewHeight:int=480, scaleToStage:Boolean = true) {
		_viewWidth = viewWidth;
		_viewHeight = viewHeight;
		_scaleToStage = scaleToStage;
		
		// Creating scene
		scene = new Scene3D();
		scene.splitAnalysis = false; // not analysis for performance
		scene.root = new Object3D();
		
		// Adding camera
		camera = new Camera3D();
		camera.z = -1000;
		scene.root.addChild(camera);
		
		// camera contoller
		cameraContoller = new CameraController(this);
		cameraContoller.camera = camera;
		
		// set view
		view = new View();
		view.camera = camera;
		addChild(view);
		
		// stage
		if (stage) init();
		else addEventListener(Event.ADDED_TO_STAGE, init);
	}
	
	/**
	 * 初期化されたときに実行されるイベントです。
	 * 初期化時に実行したい処理をオーバーライドして記述します。
	 */
	protected function atInit():void {}
	
	/**
	 * 初期化されたときに実行されるイベントです。
	 * 初期化時に実行したい処理を記述します。
	 */
	private var _onInit:Function = function():void { };
	public function get onInit():Function { return _onInit; }
	public function set onInit(value:Function):void {
		_onInit = value;
	}
	
	/**
	 * Event.ENTER_FRAME 時に実行されるレンダリングのイベントです。
	 * レンダリング前に実行したい処理をオーバーライドして記述します。
	 */
	protected function atPreRender():void {}
	
	/**
	 * Event.ENTER_FRAME 時に実行されるレンダリングのイベントです。
	 * レンダリング前に実行したい処理を記述します。
	 */
	private var _onPreRender:Function = function():void{};
	public function get onPreRender():Function { return _onPreRender; }
	public function set onPreRender(value:Function):void {
		_onPreRender = value;
	}
	
	/**
	 * Event.ENTER_FRAME 時に実行されるレンダリングのイベントです。
	 * レンダリング後に実行したい処理をオーバーライドして記述します。
	 */
	protected function atPostRender():void {
	}
	
	/**
	 * Event.ENTER_FRAME 時に実行されるレンダリングのイベントです。
	 * レンダリング後に実行したい処理を記述します。
	 */
	protected var _onPostRender:Function = function():void{};
	public function get onPostRender():Function { return _onPostRender; }
	public function set onPostRender(value:Function):void {
		_onPostRender = value;
	}
	
	/**
	 * レンダリングを開始します。
	 */
	public function startRendering():void {
		addEventListener(Event.ENTER_FRAME, onRenderTick);
	}
	/**
	 * レンダリングを停止します。
	 */
	public function stopRendering():void {
		removeEventListener(Event.ENTER_FRAME, onRenderTick);
	}
	
	/**
	 * シングルレンダリング(レンダリングを一回だけ)を実行します。
	 */
	public function singleRender():void {
		onRenderTick();
	}
	
	/**
	 * @private
	 */
	private function init(e:Event = null):void {
		stage.scaleMode = StageScaleMode.NO_SCALE;
		stage.align = StageAlign.TOP_LEFT;
		stage.quality = StageQuality.HIGH;

		// resize
		stage.addEventListener(Event.RESIZE, onResize);
		onResize(null);
		
		// render
		startRendering();
		
		atInit();
		_onInit();
		
	}
	
	/**
	 * @private
	 */
	private function onRenderTick(e:Event = null):void {
		atPreRender();
		_onPreRender();
		scene.calculate();
		atPostRender();
		_onPostRender();
	}
	
	/**
	 * public
	 */
	protected function onResize(event:Event = null):void {
		if (_scaleToStage) {
			view.width = stage.stageWidth;
			view.height = stage.stageHeight;
		}else {
			view.width = _viewWidth;
			view.height = _viewHeight;
		}
	}
}