box2dでボールを落とす.as クリックすると赤いボール落ちます。 alterna_in forked:8favorite:2lines:115license : All rights reserved modified : 2009-04-19 14:06:48 Embed Tweet package { //クリックすると赤いボール落ちます。 import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Common.*; import Box2D.Common.Math.*; [SWF(width="465", height="465",backgroundColor = "0xFFFFFF", frameRate = "30")] public class main extends Sprite { public var m_sprite:Sprite; public var m_world:b2World; public var m_physScale:Number = 30.0; public var m_iterations:int = 10; public var m_timeStep:Number = 1.0 / 30.0; //動的オブジェクト private var bodyDef:b2BodyDef; private var body:b2Body; private var boxDef:b2CircleDef; private var bodyArr:Array = []; public var urlNum:int = 0; public var loadTarget:String = "img_s/"; public function main () { m_sprite = new Sprite(); addChild (m_sprite); addEventListener (Event.ENTER_FRAME, update, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpEvent); ////////////////////////////////////////// WORLD //WORLD作成 var worldAABB:b2AABB = new b2AABB(); worldAABB.lowerBound.Set (-1000.0, -1000.0); worldAABB.upperBound.Set (1000.0, 1000.0); //重力 var gravity:b2Vec2 = new b2Vec2(0.0, 20.0); // Bodyオブジェクトのスリープ var doSleep:Boolean = true; //シミュレーション空間 m_world = new b2World(worldAABB, gravity, doSleep); ////////////////////////////////////////// デバック用 /* var dbgDraw:b2DebugDraw= new b2DebugDraw(); var dbgSprite:Sprite= new Sprite(); m_sprite.addChild (dbgSprite); dbgDraw.m_sprite= dbgSprite; dbgDraw.m_drawScale= 30.0; dbgDraw.m_fillAlpha= 0.3; dbgDraw.m_lineThickness= 1.0; dbgDraw.m_alpha=1.0; dbgDraw.m_xformScale=1.0; dbgDraw.m_drawFlags = b2DebugDraw.e_shapeBit; m_world.SetDebugDraw (dbgDraw); */ ////////////////////////////////////////// 静止オブジェクト var wallObject:b2PolygonDef = new b2PolygonDef(); wallObject.density = 0.0; var wallDef:b2BodyDef = new b2BodyDef(); var wallBody:b2Body; ////////////////// Left wallDef.position.Set (10/2 / m_physScale, 465/2 / m_physScale); wallObject.SetAsBox (10/2 / m_physScale, 465/2 / m_physScale); wallBody = m_world.CreateBody(wallDef); wallBody.CreateShape (wallObject); wallBody.SetMassFromShapes (); ////////////////// Right wallDef.position.Set ((465-10/2) / m_physScale, 465/2 / m_physScale); wallObject.SetAsBox (10/2 / m_physScale, 600/2 / m_physScale); wallBody = m_world.CreateBody(wallDef); wallBody.CreateShape (wallObject); wallBody.SetMassFromShapes (); ////////////////// Top wallDef.position.Set (465/2 / m_physScale, 10/2 / m_physScale); wallObject.SetAsBox (465/2 / m_physScale, 10/2 / m_physScale); wallBody = m_world.CreateBody(wallDef); wallBody.CreateShape (wallObject); wallBody.SetMassFromShapes (); ////////////////// Bottom wallDef.position.Set (465/2 / m_physScale, 465 / m_physScale); wallObject.SetAsBox (465/2 / m_physScale, 10/2 / m_physScale); wallBody = m_world.CreateBody(wallDef); wallBody.CreateShape (wallObject); wallBody.SetMassFromShapes (); addObj(); } ////////////////////////////////////////// オブジェクト生成 private function mouseUpEvent(e:MouseEvent) :void{ addObj(); } private function addObj ():void { bodyDef = new b2BodyDef(); bodyDef.position.Set ( mouseX / m_physScale, mouseY/ m_physScale); boxDef = new b2CircleDef(); boxDef.density = 1.5;//密度 boxDef.friction = 0.5; boxDef.restitution = 1.0;//反発係数 //ここを変更する var mc:Sprite=new Sprite(); mc.graphics.beginFill (0xFF0000); mc.graphics.drawCircle(0, 0, 50);; mc.graphics.endFill (); bodyDef.userData = mc; bodyDef.userData.x = -1000; bodyDef.userData.y = -1000; bodyDef.userData.width = 50; bodyDef.userData.height = 50; //boxDef.(mc.width/2 / m_physScale, mc.height/2 / m_physScale); body = m_world.CreateBody(bodyDef); body.CreateShape (boxDef); body.SetMassFromShapes (); addChild (bodyDef.userData); bodyArr.push (body); if (bodyArr.length > 15) { destroyDynamicObject (); } } ////////////////////////////////////////////////// オブジェクト消す private function destroyDynamicObject ():void { var tempArr:Array = bodyArr.splice(0, 1); for (var i:int = 0; i < tempArr.length; i++) { var body:b2Body = tempArr[i]; var bodyData:Sprite = Sprite(body.GetUserData()); removeChild (bodyData); m_world.DestroyBody (body); } } ////////////////////////////////////////// 描画 private function update (event:Event):void { 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 * m_physScale; bb.m_userData.y = bb.GetPosition().y * m_physScale; } } } } } Code Fullscreen Preview Fullscreen fantasista ryogo316 : # box2d Set SetAsBox CreateBody m_sprite b2BodyDef b2Body userData m_world b2CircleDef b2World GetPosition b2PolygonDef DestroyBody b2Vec2 friction m_bodyList m_next restitution m_userData SetMassFromShapes sort new page view favorite forked pv211 forked from: box2dでボールを落とす.as hacker_d7ijs11l forked:1 favorite:0lines:115 (diff:2) pv204 forked from: box2dでボールを落とす.as hacker_d7ijs11l forked:1 favorite:0lines:115 (diff:1) pv444 forked from: box2dでボールを落とす.as masatch forked:1 favorite:1lines:115 (diff:2) pv330 forked from: box2dでボールを落とす.as alterna_in forked:0 favorite:0lines:126 (diff:17) pv338 forked from: box2dでボールを落とす.as joelthetroll forked:0 favorite:0lines:115 (diff:3) pv331 forked from: box2dでボールを落とす.as killyhi forked:0 favorite:0lines:115 (diff:2) pv722 forked from: box2dでボールを落とす.as manakana forked:0 favorite:3lines:115 (diff:1) tag: box2d pv284 forked from: box2dでボールを落とす.as hacker_ltm9ghrf forked:0 favorite:1lines:115 (diff:1)