• 创建组合的刚体


    要创建组合刚体,可以分别创建多个形状定义,然后在同一个刚体实例上调用多次CreateShape(b2ShapeDef)。核心代码如下:

    1。先定义刚体定义(用来创建组合刚体),设置刚体位置,并创建刚体实例。

    var bodyDef:b2BodyDef = new b2BodyDef();

    bodyDef.position.Set(275 / PhyOption.PHYSCALE, 0 / PhyOption.PHYSCALE);

    var body:b2Body = PhyOption.getInstance().world.CreateBody(bodyDef);

    PhyOption是我自定义的类是一个单例,里面保存有物理世界的长度单位,重力常量,world引用等。

    2。创建第一个组合进去的形状(凸多边形)

    var rectShapeDef:b2PolygonDef = new b2PolygonDef();
    rectShapeDef.restitution = 0.2;
    rectShapeDef.friction = 0.3;
    rectShapeDef.density = 3;
    rectShapeDef.SetAsOrientedBox(rectWidth / 2 / PhyOption.PHYSCALE, rectHeight / 2 / PhyOption.PHYSCALE,new b2Vec2(0,0),0);

    此处与创建单独的刚体不同,此处使用的是SetAsOrientedBox方法,而单独创建刚体时用的是SetAsBox方法

    3。创建第二个组合的形状(圆形)

    var circleShapeDef:b2CircleDef = new b2CircleDef();
    circleShapeDef.friction = 0.1;
    circleShapeDef.density = 1;
    circleShapeDef.restitution = 0.4;
    circleShapeDef.radius = circleRadius/PhyOption.PHYSCALE;
    circleShapeDef.localPosition = new b2Vec2(0, -32.5 / PhyOption.PHYSCALE);

    此处与创建单独的圆形刚体不同,此处多了一个属性药赋值,即localPosition。

    4。最后创建刚体形状,根据形状计算质量

    body.CreateShape(rectShapeDef);
    body.CreateShape(circleShapeDef);
    body.SetMassFromShapes();

    5。利用调试功能看效果

    var sp:Sprite = new Sprite();
    addChild(sp);
    var dbg:b2DebugDraw = new b2DebugDraw();
    dbg.m_sprite = sp;
    dbg.m_drawFlags = b2DebugDraw.e_shapeBit;
    dbg.m_drawScale = PhyOption.PHYSCALE;
    dbg.m_fillAlpha = 0.5;
    dbg.m_alpha = 0.5;
    PhyOption.getInstance().world.SetDebugDraw(dbg);

    6。最后进行迭代模拟,需在enterFrame事件中调用

     PhyOption.getInstance().world.Step(PhyOption.STEP, PhyOption.ITERATION);

  • 相关阅读:
    Cocos开发中Visual Studio下libcurl库开发环境设置
    Cocos2d-x数据持久化-修改数据
    Cocos2d-x数据持久化-查询数据
    Cocos2d-x中SQLite数据库管理工具
    Cocos2d-x中创建SQLite数据库
    Visual Studio下SQLite数据库开发环境设置
    spring01
    String类的常用方法
    基本数据类型的包装类和随机数
    枚举类的使用
  • 原文地址:https://www.cnblogs.com/ywxgod/p/1707840.html
Copyright © 2020-2023  润新知