forked from: Flex 3 SDKとで三次元を遊ぶ[19]

by Akiyah forked from Flex 3 SDKとで三次元を遊ぶ[19] (diff: 302)
♥0 | Line 105 | Modified 2011-08-02 20:07:47 | MIT License | (replaced)
play

ActionScript3 source code

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

package{
    import Box2D.Collision.b2AABB;
    import Box2D.Collision.Shapes.b2CircleDef;
    import Box2D.Collision.Shapes.b2PolygonDef;
    import Box2D.Collision.Shapes.b2Shape;
    import Box2D.Common.Math.b2Vec2;
    import Box2D.Dynamics.b2Body;
    import Box2D.Dynamics.b2BodyDef;
    import Box2D.Dynamics.b2World;
    import Box2D.Dynamics.Joints.b2MouseJoint;
    import Box2D.Dynamics.Joints.b2MouseJointDef;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.system.Security;
    import org.papervision3d.core.data.UserData;
    import org.papervision3d.core.effects.view.ReflectionView;
    import org.papervision3d.core.geom.TriangleMesh3D;
    import org.papervision3d.core.proto.MaterialObject3D;
    import org.papervision3d.events.InteractiveScene3DEvent;
    import org.papervision3d.materials.BitmapFileMaterial;
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.materials.special.CompositeMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.materials.WireframeMaterial;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.cameras.CameraType;
    import org.papervision3d.view.BasicView;

    public class Sample extends BasicView {
        public var m_world:b2World;
        public var sd:b2CircleDef;
        public var bd:b2BodyDef;
        public var cube:TriangleMesh3D;
        public var b:b2Body;
        public var RADIUS:Number = 4;
        public var BAR_SIZE:Number = 2;
        
        Security.loadPolicyFile("http://assets.wonderfl.net/crossdomain.xml");
        public var path:String = "http://assets.wonderfl.net/images/related_images";
        public var filename:String = path+"/3/35/3590/359061d357d721a573fae94cc4d8b2819a72122c";
       
        public function Sample() {
            init_box2d();
            init_papervision();
            createBox();
            addEventListener(Event.ENTER_FRAME, update);
        }

        public function update(e:Event):void{
            m_world.Step(1.0 / 30, 10);
            
            if (b.IsFrozen()) {
                bd.position.Set(0, - 50);
                b = m_world.CreateBody(bd);
                b.CreateShape(sd);
                b.SetMassFromShapes();
            }
                
            var p:b2Vec2 = b.GetPosition();
            cube.x = - p.x * 10;
            cube.y = - p.y * 10;
            cube.rotationZ = b.GetAngle() * 180 / Math.PI;

            var camera_length:Number = 400;
            var c:Number = (mouseX / stage.width - 0.5) * (Math.PI / 2);
            var d:Number = (mouseY / stage.height) * (Math.PI / 2 / 2);
            camera.x = Math.sin(c) * Math.cos(d) * camera_length;
            camera.z = Math.cos(c) * Math.cos(d) * camera_length;
            camera.y = Math.sin(d) * camera_length;

            singleRender();
        }

        public function init_papervision():void{
            var material:MaterialObject3D = new WireframeMaterial();
            
            //var material:ColorMaterial = new ColorMaterial(0x404040);
            var mlist:MaterialsList = new MaterialsList({all:material});
            var u:Number = BAR_SIZE * 5 * 4;
            var ground:Cube = new Cube(mlist, u * 5, u * 5, u * 5, 5, 5, 5);
            ground.rotationZ = -10;
            scene.addChild(ground);
            
            viewport.interactive = true;
        }

        public function init_box2d():void {
            var worldAABB:b2AABB = new b2AABB();
            worldAABB.lowerBound.Set(-100.0, -100.0);
            worldAABB.upperBound.Set(100.0, 100.0);
            m_world = new b2World(worldAABB, new b2Vec2(0.0, 10.0), true);

            var groundSd:b2PolygonDef = new b2PolygonDef();
            var groundBd:b2BodyDef = new b2BodyDef();
            var groundB:b2Body;
            groundBd.angle = -10 / 180 * Math.PI;
            groundSd.SetAsBox(BAR_SIZE * 5, BAR_SIZE * 5);
            groundB = m_world.CreateBody(groundBd);
            groundB.CreateShape(groundSd);
            groundB.SetMassFromShapes();
            
            sd = new b2CircleDef();
            bd = new b2BodyDef();
            sd.density = 1.0;
            sd.radius = RADIUS;
        }
        
        public function createBox():void {
            var materialTop:BitmapFileMaterial = new BitmapFileMaterial(filename);

            cube = new Cylinder(materialTop, RADIUS * 10, RADIUS * 10 * 4, 8 * 2, 6, -1, true, true);
            cube.rotationX = 90;
            scene.addChild(cube);
         
            bd.position.Set(0, - 50);
            b = m_world.CreateBody(bd);
            b.CreateShape(sd);
            b.SetMassFromShapes();
        }
    }
}

Forked