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

[練習中]8月のカレンダー

[メモ]
papervision3Dの練習
すごく強引に作ってます…
もう少し勉強して、コードをすっきり、自動で毎月の数字やカレンダーを作ってくれるようにゆくゆくはしたいです~
カレンダーズームアップ後のcubeには、ブログ的なことができないかと…
とりあえず勉強不足ですが、やっていると色々勉強になりました!!
コードはすごく汚いです…
Get Adobe Flash player
by Tamanegi_kenshi 14 Aug 2010
/**
 * Copyright Tamanegi_kenshi ( http://wonderfl.net/user/Tamanegi_kenshi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2D29
 */

//[メモ]
//papervision3Dの練習
//すごく強引に作ってます…
//もう少し勉強して、コードをすっきり、自動で毎月の数字やカレンダーを作ってくれるようにゆくゆくはしたいです~
//カレンダーズームアップ後のcubeには、ブログ的なことができないかと…
//とりあえず勉強不足ですが、やっていると色々勉強になりました!!

//コードはすごく汚いです…

package {
    import flash.ui.ContextMenuBuiltInItems;
    import flash.display.Sprite;
    import flash.events.*;
    
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.events.InteractiveScene3DEvent;
    
    import caurina.transitions.Tweener;
    
    //[SWF(backgroundColor="#000000")]
     
    public class FlashTest extends Sprite {

        private var camera:Camera3D;
        private var scene:Scene3D;
        private var viewport:Viewport3D;
        private var renderer:BasicRenderEngine;
        
        private var cubeArr:Array = [];
//objectのマウスイベントの判定変数
        private var isRoll:Boolean = false;
        private var isClick:Boolean = false;          
           
        private var test:Array = [];
        
        private var angleX:Number = -90;
//クリックしたobjectのx.y.z
        private var obX:Number = 0;
        private var obY:Number = 0;
        private var obZ:Number = 0;
//objectクリック時のcameraの位置
        private var cameX:Number = 0;
        private var cameZ:Number = 0;   
//クリック時のカメラの動作(trueで正面に移動する,falseは元に戻る)?
        private var isCame:Boolean = false;
//最初の形の各objectのx,y,z配列
        private var firstX:Array = [];
        private var firstY:Array = [];
        private var firstZ:Array = [];
        private var firstScale:Array = [];
        private var firstAng:int = 0;
//カレンダーの形のobjectのx,y,z配列
        private var calenderX:Array = [];
        private var calenderY:Array = [];
        private var calenderZ:Array = [];
        private var calenderScale:Array = [];       
        
        public function FlashTest() {
           init();
        }//FlashTest
        
        private function init():void{
//Camera3Dの設定
            camera = new Camera3D();
            camera.z = -500;
//Scene3Dの設定            
            scene = new Scene3D();
//BasicRenderEngineの設定            
            renderer= new BasicRenderEngine();
//Viewport3Dの設定           
            viewport = new Viewport3D(465, 465);
            viewport.interactive = true;
            viewport.buttonMode = true;
            
            addChild(viewport);

//first配列の中身(8を作るための)
            for(var l:int = 0; l < 31; l++){
                if(l < 15){
                var radi1:Number = (360 / 15 * l + firstAng) * Math.PI / 180;
                firstX[l] = Math.cos(radi1) * 150;
                firstY[l] =150 + Math.sin(radi1) * 150;
                firstZ[l] = 200;
                } else {
                var radi2:Number = (360 / 16 * l + firstAng) * Math.PI / 180;
                firstX[l] = Math.cos(radi2) * 150;
                firstY[l] = -150 + Math.sin(radi2) * 150;
                firstZ[l] = 200;
                }
            }
//複数のobjectの設定(カレンダーを作るための)
            for(var i:int = 0; i < 5; i++){
                for(var j:int = 0; j < 7; j++){
            var material:ColorMaterial;            
            if(j == 0){ 
            material = new ColorMaterial(0xcc0000);
            } else{
            material = new ColorMaterial(0xcccccc);  
            }
            material.interactive = true;
            material.doubleSided = true;          
            var materials:MaterialsList = new MaterialsList({all:material});
            var cube:Cube = new Cube(materials, 50, 50, 50);
            
            scene.addChild(cube);
            cubeArr.push(cube);
            var caleX:int = -210 + j * 70;
            calenderX.push(caleX);
            var caleY:int = 140 - i * 70;
            calenderY.push(caleY);
            var laseZ:int = 0;
            calenderZ.push(cube.z);
            calenderScale.push(1);
            
   
//objiectにイベント
          //  cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
            cube.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onOver);
            cube.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onOut);
                }}//for

            for(var k:int = 0; k < cubeArr.length; k++){
                 cubeArr[k].x = firstX[k];
                 cubeArr[k].y = firstY[k];
                 cubeArr[k].z = firstZ[k];
                 if(k >= 31){
                 cubeArr[k].visible = false;
                 }
             }
//ENTER_FRAME
            addEventListener(Event.ENTER_FRAME, onEnter);
//sgateクリックイベント
            stage.addEventListener(MouseEvent.CLICK, onStClick);                       
        }//init
        
        private function onStClick(event:MouseEvent):void{
            addEventListener(Event.ENTER_FRAME, onFirst);
        }//onStClick
        
        private function onFirst(event:Event):void{
            for(var i:int = 0; i < 31; i++){
                var vx:Number = (calenderX[i] - cubeArr[i].x) / 10;
                var vy:Number = (calenderY[i] - cubeArr[i].y) / 10;
                var vz:Number = (0 - cubeArr[i].z) / 10;
                cubeArr[i].x += vx;
                cubeArr[i].y += vy;
                cubeArr[i].z += vz;
//カレンダーになった時の処理
                if(cubeArr[0].x < calenderX[0] + 0.1 && cubeArr[10].x < calenderX[10] + 0.1){
                    cubeArr[i].x = calenderX[i];
                    cubeArr[i].y = calenderY[i];
                    cubeArr[i].z = 0;
//カレンダーになる処理を終了させる
                    removeEventListener(Event.ENTER_FRAME, onFirst);
                    stage.removeEventListener(MouseEvent.CLICK, onStClick); 
//objectがクリックイベントをできるようにする
                    cubeArr[i].addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick);
                }//if
            }//for
        }//onFirst
//ロールオーバーイベント  
        private function onOver(event:InteractiveScene3DEvent):void{
            isRoll = true;
            test.push(event.target);
           // if(test.length <= 10){
           //     test.shift();
            //}
            if(event.target == test[test.length - 2]){
                Tweener.removeAllTweens();
            }
        }//onOver
//ロールアウトイベント        
        private function onOut(event:InteractiveScene3DEvent):void{
            Tweener.addTween(event.target, {rotationZ:0, rotationY:0, rotationZ:0, time:1});
            isRoll =false; 
        }//onOut
        
//クリックイベント        
        private function onClick(event:InteractiveScene3DEvent):void{
            isRoll =false;
            
//viewport.interactive = false;
            if(isClick == false){
                isCame = true;
//クリック時のobjectの位置                  
                obX = event.target.x;
                obY = event.target.y;
                obZ = event.target.z;
//移動中はマウスイベントをできないようにする
                viewport.interactive = false;
                viewport.buttonMode = false;
                Tweener.removeAllTweens();
                Tweener.addTween(event.target, {x:0, y:0, z:-350, scaleX:3, scaleY:3, scaleZ:0.5, rotationZ:0, rotationY:0, transition:"easeOutCirc", time:3, onComplete:endUp});
                function endUp():void{ 
                isClick = true;
//移動終了後クリックできるようにする
                viewport.interactive = true;
                viewport.buttonMode = true;
                
                }
            } else if(isClick == true){
                isCame = false;
//移動中はマウスイベントをできないようにする
                viewport.interactive = false;
                viewport.buttonMode = false;
                
                //Tweener.removeAllTweens();
                Tweener.addTween(event.target, {x:obX, y:obY, z:obZ, scaleX:1, scaleY:1, scaleZ:1, rotationZ:0, rotationY:0, transition:"easeOutCirc", time:3, onComplete:endOut});
                function endOut():void{
                
//移動終了後クリックできるようにする
                viewport.interactive = true;
                viewport.buttonMode = true;
                isClick = false;
               
                }    
            }

        }//onClick
        
        private function onEnter(event:Event):void{
//objectのマウスオーバー時のうごき
            if(isRoll == true && isClick == false){ 
                test[test.length - 1].rotationZ += 5;
                test[test.length - 1].rotationY += 5; 
            }
            if(isClick == false){
//カメラを原点中心に回転させる
            angleX += (232 - mouseX) / 500;
            camera.x = Math.cos(angleX * Math.PI / 180) * 500;
            cameX = camera.x;
            camera.z = Math.sin(angleX * Math.PI / 180) * 500;
            cameZ = camera.z;
//objectがクリックされた時            
            } else if(isClick == true){
//objectがアップ時のカメラの正面へ移動する
                if(isCame == true){
                   var cameraX:Number = (0 - camera.x) / 10;
                    var cameraZ:Number = (-500 - camera.z) / 10;
                    camera.x += cameraX;  
                    camera.z += cameraZ;
//objectが元に戻る時、
//カメラがクリックされた時の位置に移動する
                    } else if(isCame == false){
                    var cameraXreturn:Number = (cameX - camera.x) / 10;
                    var cameraZreturn:Number = (cameZ - camera.z) / 10;
                    camera.x += cameraXreturn;
                    camera.z += cameraZreturn;    
                }
            }
//カメラを原点に向ける
            var x1:Number = 0 - camera.x;
            var z1:Number = 0 - camera.z;
            var angle:Number = Math.atan2(x1, z1);
            camera.rotationY = angle * 180 / Math.PI;     
//BasicRenderEngineで表示する           
            renderer.renderScene(scene, camera, viewport);            
        }//onClick


    }//class
}//package