9RIA.com天地会 - 论坛

返回列表 发帖

天地培训

9RIA天地会官方培训机构

Adobe官方认证培训中心

[新闻资讯] [业界动态] Box2DFlash 2.1a released – what changed

  • 资讯类型: 翻译
  • 来源页面: http://www.emanueleferonato.com/2010/01/27/box2dflash-2-1a-released-what-changed/
  • 资讯原标题: Box2Dflash 2.1a发行 – 有何改变
  • 资讯原作者: Emanuele Feronato
  • 我的评论:被某位兄弟所说,多发写Box2D的教程,唉。
    对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。

    早些日子的时候, Boris the Brave 发行了通俗物理库的新版本。
    有一些有争议的改变似的旧项目不能在新环境里运行。
    最重要的几点是:
    •        现在不需要为你的世界指定尺寸,它总是会足够大的。
    •        改善了的碰撞系统。
    •        你必须指定一个躯体是否是动态,无论他的质量是否是大于0。
    •        架子现在决定形状的材质属性,例如密度,摩擦力等等。
    我相信一个实例胜于纸上千言,所以我创建了一个简单的你可以用左右按键控制的小车。他使用了外关节马达

    这是你在旧版本里面的源码:
    1. package {
    2.         import flash.display.Sprite;
    3.         import flash.events.Event;
    4.         import flash.events.KeyboardEvent;
    5.         import Box2D.Dynamics.*;
    6.         import Box2D.Collision.*;
    7.         import Box2D.Collision.Shapes.*;
    8.         import Box2D.Common.Math.*;
    9.         import Box2D.Dynamics.Joints.*;
    10.         public class car extends Sprite {
    11.                 public var world:b2World;
    12.                 public var car_body:b2Body;
    13.                 public var front_wheel:b2Body;
    14.                 public var rear_wheel:b2Body;
    15.                 public var front_motor:b2RevoluteJointDef = new b2RevoluteJointDef();
    16.                 public var rear_motor:b2RevoluteJointDef = new b2RevoluteJointDef();
    17.                 public var rear_motor_added:b2RevoluteJoint
    18.                 public var front_motor_added:b2RevoluteJoint
    19.                 public function car():void {
    20.                         // world setup
    21.                         var worldAABB:b2AABB = new b2AABB();
    22.                         worldAABB.lowerBound.Set(-100, -100);
    23.                         worldAABB.upperBound.Set(100, 100);
    24.                         world=new b2World(worldAABB,new b2Vec2(0,10.0),true);
    25.                         debug_draw();
    26.                         // variables used for bodies and motors
    27.                         var body:b2Body;
    28.                         var bodyDef:b2BodyDef= new b2BodyDef();
    29.                         var boxDef:b2PolygonDef = new b2PolygonDef();
    30.                         var circleDef:b2CircleDef= new b2CircleDef();
    31.                         var revoluteJointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
    32.                         // adding the ground
    33.                         bodyDef.position.Set(250/30, 200/30);
    34.                         boxDef.SetAsBox(600/30, 20/30);
    35.                         boxDef.friction=1;
    36.                         boxDef.density=0;
    37.                         body=world.CreateBody(bodyDef);
    38.                         body.CreateShape(boxDef);
    39.                         body.SetMassFromShapes();
    40.                         bodyDef.position.Set(0/30, 200/30);
    41.                         boxDef.SetAsBox(50/30, 50/30);
    42.                         boxDef.friction=1;
    43.                         boxDef.density=0;
    44.                         body=world.CreateBody(bodyDef);
    45.                         body.CreateShape(boxDef);
    46.                         body.SetMassFromShapes();
    47.                         bodyDef.position.Set(500/30, 200/30);
    48.                         boxDef.SetAsBox(50/30, 50/30);
    49.                         boxDef.friction=1;
    50.                         boxDef.density=0;
    51.                         body=world.CreateBody(bodyDef);
    52.                         body.CreateShape(boxDef);
    53.                         body.SetMassFromShapes();
    54.                         // adding car body
    55.                         bodyDef.position.Set(250/30, 90/30);
    56.                         car_body=world.CreateBody(bodyDef);
    57.                         boxDef.density=1;
    58.                         boxDef.friction=1;
    59.                         boxDef.restitution=0.1;
    60.                         boxDef.SetAsBox(50/30, 10/30);
    61.                         car_body.CreateShape(boxDef);
    62.                         car_body.SetMassFromShapes();
    63.                         // adding wheels
    64.                         circleDef.radius=20/30;
    65.                         circleDef.density=1;
    66.                         circleDef.friction=5;
    67.                         circleDef.restitution=0.1;
    68.                         // front wheel
    69.                         bodyDef.allowSleep = false;
    70.                         bodyDef.position.Set(car_body.GetWorldCenter().x + 40/30, car_body.GetWorldCenter().y);
    71.                         front_wheel=world.CreateBody(bodyDef);
    72.                         front_wheel.CreateShape(circleDef);
    73.                         front_wheel.SetMassFromShapes();
    74.                         // rear wheel
    75.                         bodyDef.position.Set(car_body.GetWorldCenter().x - 40/30, car_body.GetWorldCenter().y);
    76.                         rear_wheel=world.CreateBody(bodyDef);
    77.                         rear_wheel.CreateShape(circleDef);
    78.                         rear_wheel.SetMassFromShapes();
    79.                         // front joint
    80.                         front_motor.enableMotor=true;
    81.                         front_motor.maxMotorTorque=10;
    82.                         front_motor.Initialize(car_body, front_wheel, front_wheel.GetWorldCenter());
    83.                         front_motor_added=world.CreateJoint(front_motor) as b2RevoluteJoint;
    84.                         // rear joint
    85.                         rear_motor.enableMotor=true;
    86.                         rear_motor.maxMotorTorque=1;
    87.                         rear_motor.Initialize(car_body, rear_wheel, rear_wheel.GetWorldCenter());
    88.                         rear_motor_added=world.CreateJoint(rear_motor) as b2RevoluteJoint;
    89.                         //
    90.                         addEventListener(Event.ENTER_FRAME, update);
    91.                         stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
    92.                 }
    93.                 public function key_down(event:KeyboardEvent):void {
    94.                         switch (event.keyCode) {
    95.                                 case 39 :
    96.                                         rear_motor_added.SetMotorSpeed(10);
    97.                                         front_motor_added.SetMotorSpeed(10);
    98.                                         break;
    99.                                 case 37 :
    100.                                         rear_motor_added.SetMotorSpeed(-10);
    101.                                         front_motor_added.SetMotorSpeed(-10);
    102.                                         break;
    103.                         }
    104.                 }
    105.                 public function debug_draw():void {
    106.                         var m_sprite:Sprite;
    107.                         m_sprite = new Sprite();
    108.                         addChild(m_sprite);
    109.                         var dbgDraw:b2DebugDraw = new b2DebugDraw();
    110.                         var dbgSprite:Sprite = new Sprite();
    111.                         m_sprite.addChild(dbgSprite);
    112.                         dbgDraw.m_sprite=m_sprite;
    113.                         dbgDraw.m_drawScale=30;
    114.                         dbgDraw.m_alpha=1;
    115.                         dbgDraw.m_fillAlpha=0.5;
    116.                         dbgDraw.m_lineThickness=1;
    117.                         dbgDraw.m_drawFlags=b2DebugDraw.e_shapeBit;
    118.                         world.SetDebugDraw(dbgDraw);
    119.                 }
    120.                 public function update(e : Event):void {
    121.                         world.Step(1/30, 10);
    122.                 }
    123.         }
    124. }
    复制代码
    看看编译器的错误:
    1

    评分人数

    值班管理员 赐本贴 金子 + 2  诏曰:

    而今只欲关门睡,一任梅花做雪飞。

    天地人才库
    这个是新的,所有的变更都有注释。
    1. package {
    2.         import flash.display.Sprite;
    3.         import flash.events.Event;
    4.         import flash.events.KeyboardEvent;
    5.         import Box2D.Dynamics.*;
    6.         import Box2D.Collision.*;
    7.         import Box2D.Collision.Shapes.*;
    8.         import Box2D.Common.Math.*;
    9.         import Box2D.Dynamics.Joints.*;
    10.         public class car extends Sprite {
    11.                 public var world:b2World;
    12.                 public var car_body:b2Body;
    13.                 public var front_wheel:b2Body;
    14.                 public var rear_wheel:b2Body;
    15.                 public var front_motor:b2RevoluteJointDef = new b2RevoluteJointDef();
    16.                 public var rear_motor:b2RevoluteJointDef = new b2RevoluteJointDef();
    17.                 // this is new!!!
    18.                 public var fixtureDef:b2FixtureDef = new b2FixtureDef();
    19.                 public var rear_motor_added:b2RevoluteJoint;
    20.                 public var front_motor_added:b2RevoluteJoint;
    21.                 public function car():void {
    22.                         // world setup
    23.                         /*var worldAABB:b2AABB = new b2AABB();
    24.                         worldAABB.lowerBound.Set(-100, -100);
    25.                         worldAABB.upperBound.Set(100, 100);*/
    26.                         world=new b2World(new b2Vec2(0,10.0),true);// was world=new b2World(worldAABB,new b2Vec2(0,10.0),true);
    27.                         debug_draw();
    28.                         // variables used for bodies and motors
    29.                         var body:b2Body;
    30.                         var bodyDef:b2BodyDef= new b2BodyDef();
    31.                         var boxDef:b2PolygonShape = new b2PolygonShape();// was var boxDef:b2PolygonDef = new b2PolygonDef();
    32.                         var circleDef:b2CircleShape=new b2CircleShape(20/30);// was var circleDef:b2CircleDef = new b2CircleDef();
    33.                         var revoluteJointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
    34.                         // adding the ground
    35.                         bodyDef.position.Set(250/30, 200/30);
    36.                         boxDef.SetAsBox(600/30, 20/30);
    37.                         // this is new!!
    38.                         fixtureDef.shape=boxDef;
    39.                         fixtureDef.friction=1;// was boxDef.friction=1;
    40.                         fixtureDef.density=1;// was boxDef.density=0;
    41.                         body=world.CreateBody(bodyDef);
    42.                         body.CreateFixture(fixtureDef);// was body.CreateShape(boxDef);
    43.                         // remove: body.SetMassFromShapes();
    44.                         bodyDef.position.Set(0/30, 200/30);
    45.                         boxDef.SetAsBox(50/30, 50/30);
    46.                         fixtureDef.shape=boxDef;
    47.                         fixtureDef.friction=1;// was boxDef.friction=1;
    48.                         fixtureDef.density=1;// was boxDef.density=0;
    49.                         body=world.CreateBody(bodyDef);
    50.                         body.CreateFixture(fixtureDef);// was body.CreateShape(boxDef);
    51.                         // remove: body.SetMassFromShapes();
    52.                         bodyDef.position.Set(500/30, 200/30);
    53.                         boxDef.SetAsBox(50/30, 50/30);
    54.                         // this is new!!
    55.                         fixtureDef.shape=boxDef;
    56.                         fixtureDef.friction=1;// was boxDef.friction=1;
    57.                         fixtureDef.density=1;// was boxDef.density=0;
    58.                         body=world.CreateBody(bodyDef);
    59.                         body.CreateFixture(fixtureDef);// was body.CreateShape(boxDef);
    60.                         // remove: body.SetMassFromShapes();
    61.                         // adding car body
    62.                         bodyDef.position.Set(250/30, 90/30);
    63.                         // this is new!!
    64.                         bodyDef.type=b2Body.b2_dynamicBody;
    65.                         boxDef.SetAsBox(50/30, 10/30);
    66.                         // this is new!!
    67.                         fixtureDef.shape=boxDef;
    68.                         fixtureDef.density=1;// was boxDef.density=1;
    69.                         fixtureDef.friction=1;// was boxDef.friction=1;
    70.                         fixtureDef.restitution=0.1;// was boxDef.restitution=0.1;
    71.                         car_body=world.CreateBody(bodyDef);
    72.                         car_body.CreateFixture(fixtureDef);// was body.CreateShape(boxDef);
    73.                         // remove: car_body.SetMassFromShapes();
    74.                         // adding wheels
    75.                         // remove: circleDef.radius=20/30;
    76.                         fixtureDef.density=1;// was circleDef.density=1;
    77.                         fixtureDef.friction=5;// was circleDef.friction=5;
    78.                         fixtureDef.density=0.1;// was circleDef.restitution=0.1;
    79.                         // this is new!!
    80.                         fixtureDef.shape=circleDef;
    81.                         // front wheel
    82.                         bodyDef.allowSleep=false;
    83.                         bodyDef.position.Set(car_body.GetWorldCenter().x + 40/30, car_body.GetWorldCenter().y);
    84.                         front_wheel=world.CreateBody(bodyDef);
    85.                         front_wheel.CreateFixture(fixtureDef);// was front_wheel.CreateShape(circleDef);
    86.                         // remove: front_wheel.SetMassFromShapes();
    87.                         // rear wheel
    88.                         bodyDef.position.Set(car_body.GetWorldCenter().x - 40/30, car_body.GetWorldCenter().y);
    89.                         rear_wheel=world.CreateBody(bodyDef);
    90.                         rear_wheel.CreateFixture(fixtureDef);// was rear_wheel.CreateShape(circleDef);
    91.                         // remove: rear_wheel.SetMassFromShapes();
    92.                         // front joint
    93.                         front_motor.enableMotor=true;
    94.                         front_motor.maxMotorTorque=10;
    95.                         front_motor.Initialize(car_body, front_wheel, front_wheel.GetWorldCenter());
    96.                         front_motor_added=world.CreateJoint(front_motor) as b2RevoluteJoint;
    97.                         // rear joint
    98.                         rear_motor.enableMotor=true;
    99.                         rear_motor.maxMotorTorque=1;
    100.                         rear_motor.Initialize(car_body, rear_wheel, rear_wheel.GetWorldCenter());
    101.                         rear_motor_added=world.CreateJoint(rear_motor) as b2RevoluteJoint;
    102.                         //
    103.                         addEventListener(Event.ENTER_FRAME, update);
    104.                         stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
    105.                 }
    106.                 public function key_down(event:KeyboardEvent):void {
    107.                         switch (event.keyCode) {
    108.                                 case 39 :
    109.                                         rear_motor_added.SetMotorSpeed(10);
    110.                                         front_motor_added.SetMotorSpeed(10);
    111.                                         break;
    112.                                 case 37 :
    113.                                         rear_motor_added.SetMotorSpeed(-10);
    114.                                         front_motor_added.SetMotorSpeed(-10);
    115.                                         break;
    116.                         }
    117.                 }
    118.                 public function debug_draw():void {
    119.                         var m_sprite:Sprite;
    120.                         m_sprite = new Sprite();
    121.                         addChild(m_sprite);
    122.                         var dbgDraw:b2DebugDraw = new b2DebugDraw();
    123.                         var dbgSprite:Sprite = new Sprite();
    124.                         m_sprite.addChild(dbgSprite);
    125.                         dbgDraw.SetSprite(m_sprite); // was dbgDraw.m_sprite=m_sprite;
    126.                         dbgDraw.SetDrawScale(30); // was dbgDraw.m_drawScale=30;
    127.                         //dbgDraw.SetAlpha(1); // was dbgDraw.m_alpha=1;
    128.                         dbgDraw.SetFillAlpha(0.5); // was dbgDraw.m_fillAlpha=0.5;
    129.                         dbgDraw.SetLineThickness(1); // was dbgDraw.m_lineThickness=1;
    130.                         dbgDraw.SetFlags(b2DebugDraw.e_shapeBit); // was dbgDraw.m_drawFlags=b2DebugDraw.e_shapeBit;
    131.                         world.SetDebugDraw(dbgDraw);
    132.                 }
    133.                 public function update(e : Event):void {
    134.                         world.Step(1/30,10,10);// was world.Step(1/30, 10);
    135.                         // this is new!
    136.                         world.ClearForces()
    137.                         // this is new!!
    138.                         world.DrawDebugData();
    139.                 }
    140.         }
    141. }
    复制代码
    下载源码,包含新库。
    而今只欲关门睡,一任梅花做雪飞。

    TOP

    我的新项目正打算用这个呢:-)
    踏踏实实做事,潇潇洒洒做人

    TOP

    好兄弟,讲义气!---by eko

    踏上天地会荣耀之路!

     

    申请舵主

    加入掘金队

    加入译林军

    知识专题整理

     

    咨询(QQ):

    1442604479(小地)

     

    revolute joint翻译成旋转关节或直译卷关节比较好,现在你翻译成外关节了。
    踏踏实实做事,潇潇洒洒做人

    TOP

    回复 4# lushisang


    谢谢你咯,我还是太外行了,呵呵。

    TOP

    同意楼上的,C++那版的手册都是叫旋转关节

    TOP

    Box2D很好用 要支持
    Flash AS3 游戏开发峰会(超级500人QQ群):35507613

    PV3D/Away3D  Flash3D 研究所:5926437X(不公开)

    TOP

    新版就是多了几个关节!基本上变动不大!再就是 以前的时间轴(分数形式mouseJoint部分)改成HZ了

    TOP

    赞一个。
    尤其是我那双忧郁的眼神,深深的出卖了我

    TOP

    返回列表