forked from: forked from: flash on 2010-12-23

by takashi08 forked from forked from: flash on 2010-12-23 (diff: 77)
カメラ
♥0 | Line 112 | Modified 2010-12-30 17:00:10 | MIT License
play

ActionScript3 source code

/**
 * Copyright takashi08 ( http://wonderfl.net/user/takashi08 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/GIxj
 */

// forked from takashi08's forked from: flash on 2010-12-23
// forked from takashi08's flash on 2010-12-23
package {
    import flash.display.*;
    import flash.events.*;
    
     import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.events.InteractiveScene3DEvent;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.lights.PointLight3D;
    import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
    
    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.*;
    import org.libspark.betweenas3.easing.*;
    import org.libspark.betweenas3.events.*;
    
    //カメラ
    
    public class PV3D extends Sprite{
        
        private var camera:Camera3D;
        private var scene:Scene3D;
        private var viewport  :Viewport3D;
        private var renderer  :BasicRenderEngine;
        
        //camera orbit
        private var isDragging:Boolean;
        private var mouseDownX:Number;
        private var mouseDownY:Number;
        private var cameraPitch:Number;
        private var cameraYaw:Number;
        
        
        private var roringX:IObjectTween;
        private var roringY:IObjectTween;
        private var delayTween:ITween;
        private var totalTween:ITween;
        
        
        private var cube:Cube;
        private var cube2:Cube;
        
        private var cubeAry:Array = new Array();
        
        public function PV3D():void{
            //カメラ
            camera = new Camera3D();
            camera.x = 0;
            camera.y = 0;
            camera.z = -3500;
            //シーン/ビューボート/レンダラーを作成
            scene = new Scene3D();
            viewport = new Viewport3D( stage.stageWidth, stage.stageHeight, false, true );
            renderer = new BasicRenderEngine();
            addChild(viewport);
         
         //お好みでライトも()
         var light:PointLight3D = new PointLight3D(false);
         light.x = 0;
         light.y = 0;
         light.z = -1000;
         //フラットシェードマテリアル:HIKISUU light,lightColor,ambientColor,specularLevel    
         var material :FlatShadeMaterial = new FlatShadeMaterial(light, 0xD7261C );
         material.interactive = true;
         
         var materials :MaterialsList = new MaterialsList( { all : material } );
         
         for(var i:int = 0;i < 30;i++){
         cube = new Cube( materials );
         cubeAry[i] = cube;
         if(i < 5){
             cubeAry[i].x = i * 750;
             cubeAry[i].y = 0;
         }else if(i < 10){
             cubeAry[i].x = (i * 750)-3725;
             cubeAry[i].y = 750;
         }else if(i < 15){
             cubeAry[i].x = (i * 750)-7500;
             cubeAry[i].y = -750;
         }else if(i < 20){
             cubeAry[i].x = (i * 750)-7500-3725;;
             cubeAry[i].y = 1500;
         }else if(i < 25){
             cubeAry[i].x = (i * 750)-15000;
             cubeAry[i].y = -1500;
         }



         cubeAry[i].x = cubeAry[i].x -1500;

         cubeAry[i].z = 0;
         scene.addChild(cubeAry[i]);
         }
         //2こめのキューブ
         
         //マウスイベントはInteractiveScene3DEventをつかう
         //cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,cubeClickHandler);
         //シーンにcubeをaddChild
         
         
         
         addEventListener( Event.ENTER_FRAME, onEnterFrame );
         
         //camera orbit 
         stage.addEventListener(MouseEvent.MOUSE_DOWN,onDownHandler);
         stage.addEventListener(MouseEvent.MOUSE_UP,onUpHandler);
         stage.addEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler);
         
         
            roringYAnime();
        }
        
        private function roringYAnime():void{
            for(var k:int = 0;k < 30;k++){
                 roringY = BetweenAS3.tween(cubeAry[k],{rotationX:cube.rotationX + 90},null,1);
                 roringY.play();
            }
            
            roringY.addEventListener(TweenEvent.COMPLETE,tweenComplete);
        }

        
        private function onDownHandler(event:MouseEvent):void{
            //camera.target = cube2;//カメラの対象を変更
            var blurtween:ITween;
            //blurtween = BetweenAS3.tween(cube, { _blurFilter:{blurX:30, blurY:30}, alpha:0.0 }, null, 1.0);
            //blurtween = BetweenAS3.tween(cube, { x:1000}, null, 1.0);
            //blurtween.play();
            
            //カメラをbetweenでうごかす
            var cameraTween:ITween;
            cameraTween = BetweenAS3.tween(camera,{x:event.target.x,y:event.target.y ,z:event.target.z - 1000},null,2,Bounce.easeOut);
            cameraTween.play();
        }
        private function onUpHandler(event:MouseEvent):void{
            //camera.target = cube;//カメラの対象を変更
        }
        private function onMoveHandler(event:MouseEvent):void{
            
        }
        public function onEnterFrame(e:Event): void {
            renderer.renderScene( scene, camera, viewport );
        }
        
        public function tweenComplete(event:TweenEvent):void{
            for(var j:int = 0;j < 30;j++){
                roringX = BetweenAS3.tween(cubeAry[j],{rotationY:cube.rotationY + 90},null,1);
                roringX.play();
            }
            
            roringX.addEventListener(TweenEvent.COMPLETE,roringYComelete);
        }
        
        public function roringYComelete(event:TweenEvent):void{
            roringYAnime();
        }

        
        
    }

    
}