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: Flickr Tricks For Aurora Crowley!!

particle
メインクラス
/**
 * Copyright hacker_kq4j82_e ( http://wonderfl.net/user/hacker_kq4j82_e )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qZXb
 */

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

	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.render.*;
	import org.papervision3d.scenes.*;
	import org.papervision3d.view.*;

	import org.papervision3d.objects.parsers.DAE;

	//particle
	import org.papervision3d.objects.special.ParticleField;
	import org.papervision3d.materials.special.ParticleMaterial;

	[SWF(
	 backgroundColor="0x000000",
	     frameRate="45"
	)]

	//メインクラス
	public class Hyakkin extends Sprite {
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var viewport:Viewport3D;
		private var renderer:BasicRenderEngine;
		private var particleMat:ParticleMaterial;
		private var particles:ParticleField;
		private var world:BasicView;
		private var material:WireframeMaterial;
		private var sphere:Sphere;
		private var plane:PaperPlane;
		private var testObj:DAE;
		private var isMouseDown:Boolean;
		private var oldX:Number=0;
		private var oldY:Number=0;
		private var targetRotX:Number=0;
		private var targetRotY:Number=0;
		private var rotX:Number=0;
		private var rotY:Number=0;

		public function Hyakkin() {
			//シーン(3D空間)の生成
			scene=new Scene3D  ;

			//カメラの生成
			camera=new Camera3D  ;

			//カメラの設定
			camera.x=camera.y=0;
			camera.z=-100;
			camera.focus=100;//focus×zoom分、オブジェクトから離れている場合
			camera.zoom=10;//画面に同じ大きさで描画される

			//ビューポートの生成
			viewport=new Viewport3D(600,400);

			//画面にビューポートを追加
			this.addChild(viewport);

			//描画エンジンの生成
			renderer=new BasicRenderEngine;
			
			//ワイヤー
			material=new WireframeMaterial;
			sphere=new Sphere(material,10,10,10);
			scene.addChild(sphere);

			//パーティクル
			particleMat=new ParticleMaterial(0xFFFFFF,1);
			particles=new ParticleField(particleMat,500,4,2000,2000,2000);
			scene.addChild(particles);

			// DAE
			testObj=new DAE(true,null,true);
			testObj.load('baloon2.dae');
			testObj.scale=100;
			testObj.x=100;
			testObj.y=-300;
			scene.addChild(testObj);

			//毎フレームの描画処理メソッドを登録
			stage.addEventListener(Event.ENTER_FRAME,drawPapervision3d);

			//マウスイベント登録
			stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
		}

		//毎フレームの描画
		private function drawPapervision3d(e:Event):void {

			rotX += (targetRotX - rotX) * 0.05
			rotY += (targetRotY - rotY) * 0.05
			sphere.rotationY +=1;

			// カメラの位置を変える
            var rateX:Number = mouseX / stage.stageWidth;
            camera.rotationY = -100 * (rateX - 0.5);
            camera.x = -100 * (rateX - 0.5);
            var rateY:Number = mouseY / stage.stageHeight;
            camera.rotationX = 100 * (rateY - 0.5);
            camera.y = 100 * (rateY - 0.5);
			
			//cameraから見たsceneをviewportに描画
			renderer.renderScene(scene,camera,viewport);
		}

		private function downHandler(e:Event):void {
			isMouseDown=true;
			oldX=mouseX;
			oldY=mouseY;
		}

		private function upHandler(e:Event):void {
			isMouseDown=false;
		}

		private function moveHandler(e:Event):void {
			if (isMouseDown) {
				var dy:Number=stage.stageWidth-oldX;
				var dx:Number=stage.stageHeight-oldY;
				targetRotX+=dy*0.25;
				targetRotY+=dx*0.25;
				oldX = stage.stageWidth;
				oldY = stage.stageHeight;
			}
		}

	}
}