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

papervision3D:003CUBEのある面にクリック判定

赤い面をクリックすると赤い面が正面にくる
もう一度クリックすると元に戻る
元はマウスの座標に応じて動く
Get Adobe Flash player
by siny 17 Mar 2010
    Embed
/**
 * Copyright siny ( http://wonderfl.net/user/siny )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/lCXI
 */

//赤い面をクリックすると赤い面が正面にくる
//もう一度クリックすると元に戻る
//元はマウスの座標に応じて動く
package {
	import flash.events.*;
    import flash.display.Sprite;
    import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.events.*;
	
[SWF(width=465, height=465, backgroundColor=0x000000, frameRate=30)]	
    public class FlashTest extends Sprite {
    	
    		public var scene:Scene3D; //シーンを定義するクラス
		public var camera:Camera3D; //カメラを定義するクラス
		public var viewport:Viewport3D; //ビューポートを定義するクラス
		public var renderer:BasicRenderEngine; //レンダラーを定義するクラス
		
		public var material_fr:ColorMaterial; //マテリアルを定義するクラス
		public var material_bk:ColorMaterial; //マテリアルを定義するクラス
		public var material_rt:ColorMaterial; //マテリアルを定義するクラス
		public var material_lt:ColorMaterial; //マテリアルを定義するクラス
		public var material_top:ColorMaterial; //マテリアルを定義するクラス
		public var material_btm:ColorMaterial; //マテリアルを定義するクラス
		
		public var materials:MaterialsList;
		
		public var cube:Cube; //Cubeを定義
		
		public var do3d:DisplayObject3D = new DisplayObject3D();
		
		public var rY:Number;
        public var rX:Number;
    		
        public function FlashTest() {
			scene = new Scene3D(); //シーンを定義するクラス
			camera = new Camera3D(); //カメラを定義するクラス
			camera.fov = 50; //カメラの視野角を設定
			viewport = new Viewport3D(465, 465, false, true); //ビューポートを定義するクラス
			addChild(viewport); //ビューポートをステージの表示リストに追加
			//viewport.opaqueBackground = 0x000000; //ビューポートの背景色を指定
			renderer = new BasicRenderEngine(); //レンダラーを定義するクラス
			material_fr = new ColorMaterial( 0xaaaaaa ); //マテリアルを定義するクラス
			material_bk = new ColorMaterial( 0xff0000 );
			material_rt = new ColorMaterial( 0xcccccc );
			material_lt = new ColorMaterial( 0xdddddd );
			material_top = new ColorMaterial( 0xeeeeee );
			material_btm = new ColorMaterial( 0xffffff );
			material_fr.interactive = true;
			material_bk.interactive = true;
			material_rt.interactive = true;
			material_lt.interactive = true;
			material_top.interactive = true;
			material_btm.interactive = true;
			materials = new MaterialsList //複数のマテリアルをまとめて管理するクラス
			({
    		front	: material_fr,	//正面のマテリアルを指定
    		back	: material_bk,	//背面のマテリアルを指定
    		right	: material_rt,	//右面のマテリアルを指定
    		left	: material_lt,	//左面のマテリアルを指定
    		top		: material_top,	//上面のマテリアルを指定
    		bottom	: material_btm	// 底面のマテリアルを指定
			});
			cube = new Cube( materials, 300, 300, 300 ); //Cubeを定義
			do3d.addChild(cube);
			scene.addChild(do3d);
			addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
			cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
			viewport.buttonMode = true;
        }
        
       public function onClick(event:InteractiveScene3DEvent):void {
        	
        	if(event.renderHitData.material == material_fr){
                //do3d.z -= 100;
            } else if(event.renderHitData.material == material_bk){
                removeEventListener(Event.ENTER_FRAME, onEnterFrame);
				cube.removeEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
				addEventListener(Event.ENTER_FRAME, onEnterFramebk, false, 0, true);
				cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick2);
            } else if(event.renderHitData.material == material_rt){
                //do3d.x += 100;
            } else if(event.renderHitData.material == material_lt){
                //do3d.x -= 100;
            } else if(event.renderHitData.material == material_top){
               // do3d.y += 100;
            } else if(event.renderHitData.material == material_btm){
               // do3d.y -= 100;
            } 
        }
		
		public function onClick2(event:InteractiveScene3DEvent):void {
			removeEventListener(Event.ENTER_FRAME, onEnterFramebk);
			cube.removeEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick2);
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
			cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
		}
		
		public function onEnterFramebk(event:Event):void {
			rY = 0;
        	rX = 0;
        	do3d.rotationY += (rY - do3d.rotationY)*0.1;
        	do3d.rotationX += (rX - do3d.rotationX)*0.1;
    		renderer.renderScene(scene, camera, viewport); //レンダリング処理
		}
		
		public function onEnterFrame(event:Event):void {
			rY = mouseX/stage.stageWidth*360;
        	rX = -mouseY/stage.stageHeight*360;
        	do3d.rotationY += (rY - do3d.rotationY)*0.01;
        	do3d.rotationX += (rX - do3d.rotationX)*0.01;
    		renderer.renderScene(scene, camera, viewport); //レンダリング処理
		}
        
    }
}