flash on 2013-2-28
♥0 |
Line 79 |
Modified 2013-02-28 07:35:06 |
MIT License
archived:2017-03-20 14:05:29
ActionScript3 source code
/**
* Copyright ohisama ( http://wonderfl.net/user/ohisama )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jKuX
*/
package
{
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Graphics;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Common.Math.*;
import Box2D.Collision.Shapes.b2PolygonDef;
import Box2D.Collision.Shapes.b2CircleDef;
[SWF(backgroundColor="#000000", width="475", height="475")]
public class Main extends Sprite
{
private var m_world : b2World;
public function Main()
{
var worldAABB : b2AABB = new b2AABB;
worldAABB.lowerBound.Set(-300.0, -300.0);
worldAABB.upperBound.Set(300.0, 300.0);
var gravity : b2Vec2 = new b2Vec2(0, 0);
m_world = new b2World(worldAABB, gravity, true);
for (var i : int = 0; i < 7; i++)
{
var boxShape : b2CircleDef = new b2CircleDef();
boxShape.radius = 10;
boxShape.density = 8;
boxShape.friction = 8;
boxShape.restitution = 0.5;
var bodyDef : b2BodyDef = new b2BodyDef();
bodyDef.position.Set(100, i * 25 + 25);
var userData : Sprite = new Sprite();
var graphics : Graphics = userData.graphics;
graphics.beginFill(Math.random() * 0xffffff, 1);
graphics.drawCircle(0, 0, 10);
graphics.endFill();
bodyDef.userData = userData;
var body : b2Body = m_world.CreateBody(bodyDef);
body.CreateShape(boxShape);
body.SetMassFromShapes();
addChild(bodyDef.userData);
}
var ballshape : b2CircleDef = new b2CircleDef();
ballshape.radius = 20;
ballshape.density = 8;
ballshape.friction = 8;
ballshape.restitution = 0.9;
var balldef : b2BodyDef = new b2BodyDef();
balldef.position.Set(200, 100);
var userData0 : Sprite = new Sprite();
var graphics0 : Graphics = userData0.graphics;
graphics0.beginFill(0xff0000, 1);
graphics0.drawCircle(0, 0, 20);
graphics0.endFill();
balldef.userData = userData0;
var ball : b2Body = m_world.CreateBody(balldef);
ball.CreateShape(ballshape);
var pow : b2Vec2 = new b2Vec2(-10, 0);
ball.SetLinearVelocity(pow);
ball.SetMassFromShapes();
addChild(balldef.userData);
addEventListener(Event.ENTER_FRAME, onUpdateHandler);
}
private function onUpdateHandler(event : Event = null) : void
{
var m_iterations : int = 20;
var m_timeStep : Number = 1.0 / 30.0;
m_world.Step(m_timeStep, m_iterations);
for (var bb : b2Body = m_world.m_bodyList; bb; bb = bb.m_next)
{
if (bb.m_userData is Sprite)
{
bb.m_userData.x = bb.GetPosition().x;
bb.m_userData.y = bb.GetPosition().y;
bb.m_userData.rotation = bb.GetAngle() * (180 / Math.PI);
}
}
}
}
}