forked from: forked from: QuickBox2D Unicycler

by Nos_lkSsvOhB forked from forked from: QuickBox2D Unicycler (diff: 64)
4節リンク機構 Ver. QuickBox2D
なんか面白いことになった…
♥0 | Line 54 | Modified 2012-05-23 23:15:07 | MIT License
play

ActionScript3 source code

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

// forked from NewKrok's forked from: QuickBox2D Unicycler
// forked from shapevent's QuickBox2D Unicycler
package {
    import com.actionsnippet.qbox.*;
    import Box2D.Dynamics.Joints.b2RevoluteJoint;
    import Box2D.Common.Math.*;
    import flash.display.*;
    [SWF(backgroundColor=0x000000, frameRate=60)]
    public class Qb2D extends MovieClip {
        private var a:Number=7.9;
        private var b:Number=8;
        private var c:Number=7.9;
        private var d:Number=8;
        private var t:Number=0.5;
        private var theta:Number=0;
        private var xa:Number=4;
        private var ya:Number=250/30;
        private var xc:Number=xa+d;
        private var yc:Number=ya;
        private var xd:Number=xa;
        private var yd:Number=ya;
        
        private var sim:QuickBox2D;
        public function Qb2D() {
            
          code();
        }
        
        // procedural code
        private function code():void{
            var sim:QuickBox2D = new QuickBox2D(this, {debug:false,gravityY:10, renderJoints:false});
    sim.setDefault({fillColor:0x000000,lineAlpha:0});
//    sim.createStageWalls();

sim.setDefault({fillColor:0x3B459F, fillAlpha:1, lineColor:0xFFFFFF, groupIndex:-2});

var anchor:b2Vec2 = new b2Vec2();
function connect(a:QuickObject, b:QuickObject, lower:Number, upper:Number, offX:Number=0, offY:Number = 0):QuickObject{
     var min:Number = Math.min(a.y, b.y);
     var max:Number = Math.max(a.y, b.y);
     anchor.y = min + (max - min) * 0.5 + offY;
     min = Math.min(a.x, b.x);
     max = Math.max(a.x, b.x);
     anchor.x = min + (max - min) * 0.5 + offX;
     return sim.addJoint({type:"revolute", a:a.body, b:b.body, x1:anchor.x, y1:anchor.y});
}

var link4:QuickObject = sim.addBox({x:xa+d/2, y:ya, width:d, height:t, density:0});
var link1:QuickObject = sim.addBox({x:xa+a/2, y:ya, width:a, height:t});
var link3:QuickObject = sim.addBox({x:xa+d+c/2, y:ya, width:c, height:t});
var link2:QuickObject = sim.addBox({x:xa+a+b/2, y:ya, width:b, height:t});
var motor:QuickObject=sim.addJoint({type:"revolute", a:link1.body, b:link4.body, x1:link4.x-d/2, y1:link4.y, enableMotor:true, maxMotorTorque:800});
sim.addJoint({type:"revolute", a:link3.body, b:link4.body, x1:link4.x+d/2, y1:link4.y});
sim.addJoint({type:"revolute", a:link1.body, b:link2.body, x1:link1.x+a/2, y1:link1.y});
sim.addJoint({type:"revolute", a:link2.body, b:link3.body, x1:link2.x+b/2, y1:link3.y});
//connect(link1, link4);

/*var ancA:QuickObject = sim.addCircle({x:20, y:12, radius:0.5, density:0, skin:"none"});
var ancB:QuickObject = sim.addCircle({x:20, y:2, radius:0.5, density:0, skin:"none"});
var head:QuickObject = sim.addCircle({x:0, y:-0.6, radius:.5});
var neck:QuickObject = sim.addBox({x:0, y:1, width:0.5, height:2});
var spindle:QuickObject = sim.addBox({x:0, y:3, width:0.1, height:2})
spindle.userData.visible = false;
var top:QuickObject = sim.addGroup({objects:[head, neck, spindle], x:10, y:5, fixedRotation:true});
var upperLegA:QuickObject = sim.addBox({x:10, y:7.5, width:0.25, height:1.5});
var lowerLegA:QuickObject = sim.addBox({x:10, y:9, width:0.25, height:1.5});
var wheel:QuickObject = sim.addCircle({x:10, y:9, radius:1});
var upperLegB:QuickObject = sim.addBox({x:10, y:7.5, width:0.25, height:1.5});
var lowerLegB:QuickObject = sim.addBox({x:10, y:9, width:0.25, height:1.5});
var upperArmA:QuickObject = sim.addBox({x:10.7, y:5.25, width:1.5, height:0.25});
var lowerArmA:QuickObject = sim.addBox({x:11.8, y:5.25, width:1.2, height:0.25});
var upperArmB:QuickObject = sim.addBox({x:9.5, y:5.25, width:1.5, height:0.25});
var lowerArmB:QuickObject = sim.addBox({x:8.4, y:5.25, width:1.2, height:0.25});
sim.addJoint({type:"revolute", a:wheel.body, b:top.body, x1:wheel.x, y1:wheel.y});
sim.addJoint({type:"revolute", a:lowerLegA.body, b:wheel.body, x1:lowerLegA.x, y1:lowerLegA.y + 0.7});
sim.setDefault({enableLimit:true});
connect(top, upperArmA, 0, 3, -.3, .1);
connect(upperArmA, lowerArmA, -2.5, -1, 0, 0);
connect(top, upperArmB, -3, 0, .3, .1);
connect(upperArmB, lowerArmB, -2.5, -1, 0, 0);
//sim.addJoint({type:"distance", a:lowerArmA.body, b:ancA.body, frequencyHz:0.1});
//sim.addJoint({type:"distance", a:lowerArmB.body, b:ancB.body, frequencyHz:0.1});
sim.setDefault({enableLimit:true});
connect(top, upperLegA, -6.28, 6, 0, 0.8);
connect(upperLegA, lowerLegA, .1, 6);
wheel.angle = Math.PI;
connect(top, upperLegB, -6.28, 6, 0, 0.8);
connect(upperLegB, lowerLegB, .1, 6);
sim.setDefault({enableLimit:false, type:"revolute"});
sim.addJoint({a:lowerLegB.body, b:wheel.body, x1:lowerLegB.x, y1:lowerLegB.y + 0.7});
*/
sim.start();
sim.mouseDrag();
//var sd:Number = 5, s:Number = 0, t:Number = 0;
sim.addEventListener(QuickBox2D.STEP, function():void{
//    top.angle -= 0.1;

//     link1.angle+=6;
var joint:b2RevoluteJoint = motor.joint as b2RevoluteJoint
joint.SetMotorSpeed(3);

/*    if (top.x> 12) sd = -5
    if (top.x <4) sd = 5;
    s += (sd - s) / 8;
    wheel.angle+=0.1;
*/
    });
}
    }
}