which is a broken cam?
forked from 3dpv_basicTraining (diff: 231)
1つの部屋に、5つのカメラ(紺色のパネル)があります。それらが部屋の中心に向かって写している様子を、左上の4つのボタンをクリックすることで見ることができます。ただし5つのカメラのうち、1つだけ壊れていてその写している様子を見ることができません。壊れているカメラを推理し、そのカメラをクリックしてください。正しければ"correct"の文字が左上に表示されます。
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)];
}
}
