package { import flash.display.*; import flash.events.*; import flash.ui.Keyboard; import org.papervision3d.scenes.*; import org.papervision3d.objects.*; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; public class MultipleObjects extends Sprite { private var container : Sprite; private var scene : MovieScene3D; private var camera : Camera3D; private var rootNode : DisplayObject3D; private var cubeObj1 : Cube; private var cubeObj2 : Cube; private var cubeObj3 : Cube; private var cubeObj4 : Cube; private var cubeObj5 : Cube; private var cubeObj6 : Cube; private var cubeObj7 : Cube; private var cubeObj8 : Cube; private var cubeObj9 : Cube; private var cubeObj10 : Cube; private var material1 : ColorMaterial; private var material2 : ColorMaterial; private var material3 : ColorMaterial; private var material4 : ColorMaterial; private var material5 : ColorMaterial; private var material6 : ColorMaterial; private var material7 : ColorMaterial; private var material8 : ColorMaterial; private var material9 : ColorMaterial; private var material10 : ColorMaterial; //---------------------------------------------Constructor public function MultipleObjects():void { stage.frameRate = 60; stage.quality = "MEDIUM"; stage.scaleMode = "noScale"; stage.align = StageAlign.TOP_LEFT; //コンテナ生成 container = new Sprite(); container.x = stage.stageWidth / 2; container.y = stage.stageHeight / 2; stage.addChild( container ); //シーン生成 scene = new MovieScene3D( container ); //rootNode生成 rootNode = new DisplayObject3D(); scene.addChild( rootNode ); //マテリアル1設定 最前列3つのオブジェクトの左側(白色) material1 = new ColorMaterial( 0xffffff, 1 ); material1.doubleSided = true; material1.smooth = true; //Cube1オブジェクト生成 cubeObj1 = new Cube(material1, 400, 400, 400, 2, 2, 2); cubeObj1.x = -400; rootNode.addChild(cubeObj1); //マテリアル2設定 最前列2つのオブジェクトの中心(灰色) material2 = new ColorMaterial( 0x888888, 1 ); material2.doubleSided = true; material2.smooth = true; //Cube2オブジェクト生成 cubeObj2 = new Cube(material2, 400, 400, 400, 2, 2, 2); rootNode.addChild(cubeObj2); //マテリアル3設定 最前列3つのオブジェクトの右側(白色) material3 = new ColorMaterial( 0xffffff, 1 ); material3.doubleSided = true; material3.smooth = true; //Cube3オブジェクト生成 cubeObj3 = new Cube(material3, 400, 400, 400, 2, 2, 2); cubeObj3.x = 400; rootNode.addChild(cubeObj3); //マテリアル4設定 2列目3つのオブジェクトの左側(灰色) material4 = new ColorMaterial( 0x888888, 1 ); material4.doubleSided = true; material4.smooth = true; //Cube4オブジェクト生成 cubeObj4 = new Cube(material4, 400, 400, 400, 2, 2, 2); cubeObj4.x = -400; cubeObj4.z = 400; rootNode.addChild(cubeObj4); //マテリアル5設定 2列目3つのオブジェクトの中心(白色) material5 = new ColorMaterial( 0xffffff, 1 ); material5.doubleSided = true; material5.smooth = true; //Cube5オブジェクト生成 cubeObj5 = new Cube(material5, 400, 400, 400, 2, 2, 2); cubeObj5.z = 400; rootNode.addChild(cubeObj5); //マテリアル6設定 2列目3つのオブジェクトの右側(灰色) material6 = new ColorMaterial( 0x888888, 1 ); material6.doubleSided = true; material6.smooth = true; //Cube4オブジェクト生成 cubeObj6 = new Cube(material6, 400, 400, 400, 2, 2, 2); cubeObj6.x = 400; cubeObj6.z = 400; rootNode.addChild(cubeObj6); //マテリアル7設定 3列目3つのオブジェクトの左側(白色) material7 = new ColorMaterial( 0xffffff, 1 ); material7.doubleSided = true; material7.smooth = true; //Cube7オブジェクト生成 cubeObj7 = new Cube(material7, 400, 400, 400, 2, 2, 2); cubeObj7.x = -400; cubeObj7.z = 800; rootNode.addChild(cubeObj7); //マテリアル8設定 3列目3つのオブジェクトの中心(灰色) material8 = new ColorMaterial( 0x888888, 1 ); material8.doubleSided = true; material8.smooth = true; //Cube8オブジェクト生成 cubeObj8 = new Cube(material8, 400, 400, 400, 2, 2, 2); cubeObj8.z = 800; rootNode.addChild(cubeObj8); //マテリアル9設定 3列目3つのオブジェクトの右側(白色) material9 = new ColorMaterial( 0xffffff, 1 ); material9.doubleSided = true; material9.smooth = true; //Cube9オブジェクト生成 cubeObj9 = new Cube(material9, 400, 400, 400, 2, 2, 2); cubeObj9.x = 400; cubeObj9.z = 800; rootNode.addChild(cubeObj9); //マテリアル10設定 操作用オブジェクト(青色) material10 = new ColorMaterial( 0x0000ff, 1 ); material10.doubleSided = true; material10.smooth = true; //Cube10オブジェクト生成 cubeObj10 = new Cube(material10, 400, 400, 400, 2, 2, 2); cubeObj10.y = 400; rootNode.addChild(cubeObj10); //camera設定 camera = new Camera3D(); camera.zoom = 1; stage.addEventListener(Event.ENTER_FRAME, loop); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); stage.addEventListener(Event.RESIZE, onStageResize); } //---------------------------------------------loop private function loop(event:Event):void{ camera.x = container.mouseX * 10; camera.y = container.mouseY * 10; scene.renderCamera( camera ); } //---------------------------------------------onKeyDown private function onKeyDown(event:KeyboardEvent):void{ if( event.keyCode == Keyboard.LEFT ) { if (cubeObj10.x >= -350) { cubeObj10.x -= 50; } } else if ( event.keyCode == Keyboard.RIGHT ) { if (cubeObj10.x <= 350) { cubeObj10.x += 50; } } else if ( event.keyCode == Keyboard.UP ) { if (cubeObj10.z <= 750) { cubeObj10.z += 50; } } else if ( event.keyCode == Keyboard.DOWN ) { if (cubeObj10.z >= 50) { cubeObj10.z -= 50; } } scene.renderCamera( camera ); } //---------------------------------------------onStageResize private function onStageResize(event:Event):void{ container.x = this.stage.stageWidth / 2; container.y = this.stage.stageHeight / 2; } } }