Map的な物とPlane的な物

by Nowloading_
これをあれしてあれして、あれをああすれば完成するんだ!

説明:コイツ→(http://wonderfl.net/c/p15s)を少し弄っただけ。
追加;Fieldに高低を取り入れる。キャラと言う名のPlaneを配置する(動かない)
♥0 | Line 100 | Modified 2011-09-02 00:08:31 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.DisplayObject;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.utils.*;
    import org.papervision3d.materials.special.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.view.*;
    import flash.events.*;
    [SWF(backgroundColor = 0x000000)]
    public class mf extends BasicView {
        //cube = Fieldの部品格納用オブジェクト
        private var field:DisplayObject3D;
        //地形参照用配列:Field[x軸の個数][z軸の個数]
        //0=green,1=brown, 2=blue
        //上部の迂路の指定
        private var uField:Array = [[0,0,0,1,1],
                                    [0,0,1,2,2],
                                    [0,1,2,2,2],
                                    [0,1,1,2,2],
                                    [0,0,1,2,2],
                                   ];
        //下部の色の指定
        private var dField:Array = [[1,1,1,1,1],
                                    [1,1,1,1,2],
                                    [1,1,1,2,2],
                                    [1,1,1,1,2],
                                    [1,1,1,2,2],
                                   ];
        //各cubeの高さ
        private var high:Array = [[3,2,1,1,2],
                                  [2,1,0,0,0],
                                  [1,0,0,0,0],
                                  [1,1,0,0,0],
                                  [2,1,1,0,0],
                                 ];
        //Cube用material,primitive
        private var gr:ColorMaterial = new ColorMaterial(0x60ff60);
        private var br:ColorMaterial = new ColorMaterial(0xd0a080);
        private var bl:ColorMaterial = new ColorMaterial(0xd0ddff);
        private var g:MaterialsList = new MaterialsList( { all:gr } );
        private var l:MaterialsList = new MaterialsList( { all:br } );
        private var b:MaterialsList = new MaterialsList( { all:bl } );
        //格納用
        private var materials:Array = [g,l,b];
        //表面用と下部用のcube
        private var ucube:Cube;
        private var dcube:Cube;
        //cube sizeと間隔;
        private var wide:int = 50;
        private var dx:int = 5;
        
        //palne = charaの部品格納用オブジェクト
        private var chara:DisplayObject3D;
        //Plane用
        private var material:WireframeMaterial = new WireframeMaterial(0xcc0000,3);
        private var material2:WireframeMaterial = new WireframeMaterial(0x0000cc,3);
        private var plane:Plane;
        private var haiti:Array = [[1,0,0,0,2],
                                   [0,1,0,0,0],
                                   [1,0,0,0,0],
                                   [0,0,0,0,2],
                                   [2,2,0,0,0],
                                  ];
                                   
        //radiun
        private var rad:int = 0;     

        public function mf() {
            init();
        }
        private function init():void{
            material.doubleSided = true;
            material2.doubleSided = true;
            field = new DisplayObject3D;
            chara = new DisplayObject3D;
            scene.addChild(field);
            scene.addChild(chara);
            //materialslistの作成
            for(var i:int = 0; i<uField.length; i++){
                for(var j:int = 0; j<uField[0].length; j++){
                    ucube = new Cube(materials[uField[i][j]],wide,wide,15);
                    dcube = new Cube(materials[dField[i][j]],wide,wide,35);
                    //位置設定(floorは切り捨て)
                    ucube.x = dcube.x = -((wide+dx)*Math.floor(uField.length/2)) + ((wide+dx)*i);
                    ucube.z = dcube.z = -((wide+dx)*Math.floor(uField[0].length/2)) + ((wide+dx)*j);
                    ucube.y = dcube.y = (high[i][j]*25);
                    ucube.y += 25;
                    field.addChild(ucube,"UCx_"+i+"z_"+j);
                    field.addChild(dcube,"DCx_"+i+"z_"+j);
                    //charaの追加
                    if(haiti[i][j] != 0){
                        if(haiti[i][j] == 1){
                            plane = new Plane(material,40,60,4,8);
                        }else if(haiti[i][j] == 2 ){
                            plane = new Plane(material2,40,60,4,8);
                        }
                        plane.x = -((wide+dx)*Math.floor(uField.length/2)) + ((wide+dx)*i);
                        plane.z = -((wide+dx)*Math.floor(uField[0].length/2)) + ((wide+dx)*j);
                        plane.y = ucube.y + 55;
                        chara.addChild(plane, "cx_"+i+"_z"+j);
                    }

                }
            }   
            camera.y = 250;
            camera.z = -200;
            startRendering();
            addEventListener(Event.ENTER_FRAME,oEF);
        }
        private function oEF(e:Event):void{
            camera.x = 250*Math.sin(rad*Math.PI/180);
            camera.z = -250*Math.cos(rad*Math.PI/180);
            rad += 2;
            if ( rad>=360){
                rad =0;
            }
        }
    }
}