which is a broken cam?

by ushisantoasobu forked from 3dpv_basicTraining (diff: 231)
1つの部屋に、5つのカメラ(紺色のパネル)があります。それらが部屋の中心に向かって写している様子を、左上の4つのボタンをクリックすることで見ることができます。ただし5つのカメラのうち、1つだけ壊れていてその写している様子を見ることができません。壊れているカメラを推理し、そのカメラをクリックしてください。正しければ"correct"の文字が左上に表示されます。
♥0 | Line 209 | Modified 2010-10-26 00:05:50 | MIT License
play

ActionScript3 source code

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

// forked from ushisantoasobu's 3dpv_basicTraining
package {
    import flash.text.TextField;
    import flash.media.Sound;

    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.Event;
    
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.view.*;
    import org.papervision3d.view.layer.ViewportLayer;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.render.*;
    import org.papervision3d.cameras.*;
    
    import caurina.transitions.Tweener;
    
    import flash.filters.DropShadowFilter;
    
    [SWF(backgroundColor = 0x090909)]
    
        public class FlashTest extends Sprite {
        
        public var scene:Scene3D;
        public var viewport:Viewport3D;
        public var renderer:BasicRenderEngine;
        public var camera:Camera3D;
        
        public var _btn:btn;
        public var camera_pos:int = 0;
        
        public var panel_arr:Array = new Array();
        public var camera_arr:Array = new Array();
        public var layer_arr:Array = new Array();
        public var answer_num:int;
        public var _btn_pos:int = 0;
        public var tex:TextField;
        public var tex_correct:TextField;
        public var tex_wrong:TextField;
        public var room_line:int = 10;
        
        public function FlashTest() {            
            
            scene = new Scene3D();
            
            camera = new Camera3D();
            camera.x = 0;
            camera.y = 2000;
            camera.z = -2000;
            camera.rotationX = 45;
            camera.focus = 100;
            camera.zoom = 10;
            
            viewport = new Viewport3D(465, 465);
            
            this.addChild(viewport);
            
            renderer = new BasicRenderEngine();
           
            var Arr:Array = randomNumberArr(0,3); 
           
            tex = new TextField();
            tex.x = 8;tex.y = 10;tex.selectable = false;
            tex.text = "camera select button";
            addChild(tex);
            
            /*--room作成-------------------------------------------------------------*/            
            var material_room:ColorMaterial = new ColorMaterial(0xFFFFFF, 0.85);
            material_room.doubleSided = true;
            
            var room_under:Plane  = new Plane(material_room, 1000, 1000, 10, 10);
            var room_roof:Plane  = new Plane(material_room, 1000, 1000, 10, 10);
            var room_vertical_1:Plane  = new Plane(material_room, 1000, 500, 10, 10);
            var room_vertical_2:Plane  = new Plane(material_room, 1000, 500, 10, 10);
            var room_vertical_3:Plane  = new Plane(material_room, 1000, 500, 10, 10);
            var room_vertical_4:Plane  = new Plane(material_room, 1000, 500, 10, 10);
            
            room_under.rotationX = 90;
            room_under.y = -250 - room_line;
            room_roof.rotationX = 90;
            room_roof.y = 250 + room_line;
            room_vertical_1.z = -500 - room_line;
            room_vertical_2.rotationY = 90;
            room_vertical_2.x = -500 - room_line;
            room_vertical_3.z = 500 + room_line;
            room_vertical_4.rotationY = 90;
            room_vertical_4.x = 500 + room_line;
            
            scene.addChild(room_under);
            scene.addChild(room_roof);
            scene.addChild(room_vertical_1);
            scene.addChild(room_vertical_2);
            scene.addChild(room_vertical_3);
            scene.addChild(room_vertical_4);
            /*-----------------------------------------------------------------------*/
            
            answer_num = int(Math.random() * (5)); 
            
            /*<<パネル作成>>*/
            var material_panel:ColorMaterial = new ColorMaterial(0x000055);
            material_panel.doubleSided = true; 
            
            for(var i:int = 0; i < 5; i++){
                var panel:Plane  = new Plane(material_panel, 80, 80, 10, 10);
                panel.y = 50;
                scene.addChild(panel);
                panel_arr[i] = panel;
                
                switch(i){
                    case 0:
                        var random_X:int = int(Math.random() * (700)) - 450;
                        var random_Z:int = int(Math.random() * 50) + 400;
                        var random_rot_Y:int = int(Math.random() * 20) + 170;
                    break;
                    case 1:
                        var random_X:int = int(Math.random() * 100) + 350;
                        var random_Z:int = int(Math.random() * 550) - 100;
                        var random_rot_Y:int = int(Math.random() * 20) - 100;
                    break;
                    case 2:
                        var random_X:int = int(Math.random() * 200) + 250;
                        var random_Z:int = int(Math.random() * (-100)) - 350;
                        var random_rot_Y:int = int(Math.random() * 25) - 20;
                    break;
                    case 3:
                        var random_X:int = int(Math.random() * 650) - 450;
                        var random_Z:int = int(Math.random() * (-50)) - 400;
                        var random_rot_Y:int = int(Math.random() * 30) - 10;
                    break;
                    case 4:
                        var random_X:int = int(Math.random() * 50) - 450;
                        var random_Z:int = int(Math.random() * 700) - 350;
                        var random_rot_Y:int = int(Math.random() * 30) + 75;
                    break;
                }
                
                panel.x = random_X;
                panel.z = random_Z;
                panel.rotationY = random_rot_Y;
                
                
                var cam:Camera3D = new Camera3D();
                camera_arr[i] = cam;
                camera_arr[i].x = random_X;
                camera_arr[i].z = random_Z;
                camera_arr[i].rotationY = random_rot_Y;
                camera_arr[i].y = 80;
                camera_arr[i].focus = 120;
                camera_arr[i].zoom = 2;
                
                if(i == answer_num){
                
                }
                else{
                    _btn = new btn();
                    _btn.x = 10 + Arr[_btn_pos] * 40;
                    _btn.y = 32;
                    _btn.data = i;
                    _btn.addEventListener(MouseEvent.CLICK, btnEventHandler);            
                    addChild(_btn); 
                    _btn_pos += 1;                
                }
            } 
            /*<<---------->>*/
            
            tex_correct = new TextField();
            tex_correct.x = 8;tex_correct.y = 64;tex_correct.selectable = false;
            tex_correct.textColor = 0xFF0000;tex_correct.alpha = 0.0;
            tex_correct.text = "correct!!";
            addChild(tex_correct);
            
            tex_wrong = new TextField();
            tex_wrong.x = 8;tex_wrong.y = 64;tex_wrong.selectable = false;
            tex_wrong.textColor = 0xFF0000;tex_wrong.alpha = 0.0;
            tex_wrong.text = "wrong!!";
            addChild(tex_wrong);
                        
            stage.addEventListener(Event.ENTER_FRAME, drawPapervision3d);
            
            aaa();       
            
            /**/
            if(answer_num == 0){
                camera = camera_arr[1];
            }else{
                camera = camera_arr[0];
            }
            /**/
            
            //tex.text = Arr[0]+","+Arr[1]+","+Arr[2]+","+Arr[3];
        }
        
        /*----*/
        private function drawPapervision3d(e:Event):void{
            renderer.renderScene(scene, camera, viewport);        
        }
        
        /*----*/
        private function aaa():void{           
            for(var i:int = 0; i < 5; i++){
                var _viewportlayer:ViewportLayer = viewport.getChildLayer(panel_arr[i]);
                _viewportlayer.buttonMode = true;             
                layer_arr[i] = _viewportlayer;
                layer_arr[i].name = i; 
                layer_arr[i].addEventListener(MouseEvent.CLICK, mouseEventHandler);   
            }                 
        }
        
        /*--パネルイベントハンドラー--*/
        private function mouseEventHandler(e:MouseEvent):void{
            if(answer_num == e.target.name){
                //tex.text = e.target.name + ", correct";
                tex_wrong.alpha = 0.0;
                Tweener.addTween(tex_correct, {alpha:1.0, time:0.6});
                Tweener.addTween(tex_correct, {alpha:0.0, time:0.6, delay:1.6});
            }else{
                //tex.text = e.target.name + ", wrong";
                tex_correct.alpha = 0.0;
                Tweener.addTween(tex_wrong, {alpha:1.0, time:0.6});
                Tweener.addTween(tex_wrong, {alpha:0.0, time:0.6, delay:1.6});
            }
        }
        
        /*--カメラボタンハンドラ--*/
        private function btnEventHandler(e:MouseEvent):void{        
            camera = camera_arr[e.target.data];
        }
        
        /*--ランダム数発生関数--*/
        private function randomNumberArr( s:int , e:int ):Array {
            var len:int = e-s;
            var arr:Array = new Array(len);
            var an:int = 0;
            var i:int = 0;
            for( i = s ; i <= e ; i++){
                arr[ an ] = i;
                an++;
                }
    
            var rarr:Array = new Array();
            for( i = 0 ; i <= len ; i++ ){ 
                var r:int = Math.random() * arr.length >> 0;
                var p:int = arr[ r];
                arr.splice(r,1);
                rarr.push( p );
                }
    
            arr = null;
            return rarr;
        }        
        
    }
}



import flash.filters.DropShadowFilter;
import flash.display.Sprite;

class btn extends Sprite{
    
    public var data:int;
    
    public function btn(){
        this.graphics.beginFill(0xAAFF22);
        this.graphics.drawRect(0, 0, 20, 20);
        this.graphics.endFill();
        this.buttonMode = true;

        this.filters = [new DropShadowFilter(2, 45, 0x000000)];
    }

}