<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onCreationComplete()" frameRate="30" layout="absolute"> <mx:Script><![CDATA[ import flash.events.KeyboardEvent; import mx.controls.Alert; import mx.events.CloseEvent; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.MovieMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.core.effects.view.ReflectionView; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Plane; //コンテナ private var container:Sprite; //鏡面反射用 private var reflectionView:ReflectionView; //ルート用 private var rootNode:DisplayObject3D; //立方体 private var cube:Cube; //レンダリングする?しないフラグ private var isRender:Boolean = true; /** * 初期イベント */ private function onCreationComplete():void { container = new Sprite(); //画面に登録 rawChildren.addChild(container); //ReflectionViewクラス作成 reflectionView = new ReflectionView(baseCanvas.width, baseCanvas.height, true, true); // 反射面の高さを設定します reflectionView.surfaceHeight = 0; //反射面へのフィルター //reflectionView.viewportReflection.filters = ; //反射面へのアルファ値 reflectionView.viewportReflection.alpha = .25; //コンテナに登録 container.addChild(reflectionView); //カメラの位置設定 reflectionView.camera.zoom=30; reflectionView.camera.focus = 20; reflectionView.camera.y = 700; reflectionView.camera.target = DisplayObject3D.ZERO; //rootNodeの作成 rootNode=reflectionView.scene.addChild(new DisplayObject3D("rootNode")); // 地面用マテリアルの作成 var compMat:CompositeMaterial = new CompositeMaterial(); compMat.addMaterial(new WireframeMaterial(0xEEEEEE)); compMat.addMaterial(new ColorMaterial(0xEEEEEE, 0.1)); var plane:Plane = new Plane(compMat, 3000, 3000, 6, 6); plane.pitch(90) rootNode.addChild(plane); //ログインボックスのボックス作成 var moveMaterial:MovieMaterial = new MovieMaterial(loginWindow, true, true, true); moveMaterial.interactive=true; var materialList:MaterialsList = new MaterialsList({all:moveMaterial}); cube = new Cube(materialList, 460, 460, 180); cube.y = 100; rootNode.addChild(cube, "cube"); //フレームイベント登録 addEventListener(Event.ENTER_FRAME, onEnterFrame); } /** * フレームイベント * @param e */ private function onEnterFrame(e:Event):void { //レンダリングしない場合は、以下を実行しない if(!isRender){ return; } //立方体を横回転 cube.rotationY += 0.5; //レンダリング reflectionView.singleRender(); } /** * ログインボタンクリック時のイベント * @param event */ private function onLoginClick(event:MouseEvent):void { Alert.show("ログインボタンクリック","ボタン押下", 1, this, onAlertClick); isRender = false; } /** * キャンセルボタンクリック時のイベント * @param event */ private function onCancelClick(event:MouseEvent):void { Alert.show("キャンセルボタンクリック","ボタン押下", 1, this, onAlertClick); isRender = false; } /** * AlertのOKボタン押下時 * @param event */ private function onAlertClick(event:CloseEvent):void { isRender = true; } /** * ログインボタンでキー押下時のイベント * @param event */ private function onLoginKeyDown(event:KeyboardEvent):void { if(event.keyCode == Keyboard.ENTER){ Alert.show("ログインボタンでENTER","キー押下", 1, this, onAlertClick); isRender = false; } } /** * キャンセルボタンでキー押下時のイベント * @param event */ private function onCancelKeyDown(event:KeyboardEvent):void { if(event.keyCode == Keyboard.ENTER){ Alert.show("キャンセルボタンでENTER","キー押下", 1, this, onAlertClick); isRender = false; } } ]]></mx:Script> <!-- ログインボックス --> <mx:Canvas id="loginWindow" backgroundColor="#FFFFFF" width="230" height="90"> <mx:Button label="ログイン" x="25" y="61" width="80" height="22" click="onLoginClick(event)" keyDown="onLoginKeyDown(event)" /> <mx:Button label="キャンセル" x="125" y="61" width="80" height="22" click="onCancelClick(event)" keyDown="onCancelKeyDown(event)" /> <mx:TextArea x="75" y="7" width="130" height="22"/> <mx:TextArea x="75" y="34" width="130" height="22"/> <mx:Label text="ID" x="25" y="7" width="40" height="22"/> <mx:Label text="PASS" x="25" y="34" width="40" height="22"/> </mx:Canvas> <!-- ログインボックスを隠す --> <mx:Canvas id="baseCanvas" backgroundColor="#000000" x="0" y="0" width="100%" height="100%"/> </mx:Application> Flex+ReflectionView