Box2D教程1-创建碰撞世界

Box2D教程2-鼠标交互

Box2D教程3-刚体绑定外观

Box2D教程4-复杂刚体的复杂外观

Box2D教程5-碰撞检测

通常我们制作游戏时不可能使用Box2D提供的默认调试显示对象,我们需要创建个性化的外观,如果汽车、房子等等。那么如何把这些外观附加到刚体上面呢?这就是此教程的重点。
创建一个刚体外观,我们两步:
1. 将外观显示对象附加到刚体的刚体定义的userData属性
2. 将userData的x, y, rotation与刚体实现同步

在上一个教程的基础上,修改createBall()方法,添加显示对象Ball(自定义显示对象)

private function createBall():void        {for(var i:int = 0; i < 10; i++)            {var ballDef:b2BodyDef = new b2BodyDef();                ballDef.type = b2Body.b2_dynamicBody;var radius:Number = 10+Math.random()*20;var circleShape:b2CircleShape  = new b2CircleShape(radius/PIXEL_TO_METER);var ballFixtureDef:b2FixtureDef = new b2FixtureDef();                ballFixtureDef.shape = circleShape;                ballFixtureDef.density = 1.0;                ballFixtureDef.restitution = 1.0;                ballFixtureDef.friction = 0.5;                ballDef.position.Set(stage.stageWidth/2/PIXEL_TO_METER,20/PIXEL_TO_METER);

//为每一个球创建一个相同大小的显示对象外观                var ballSprite:Ball = new Ball(radius,i+"");//将显示对象存入刚体定义的userData树形                ballDef.userData = ballSprite;//添加到容器中                addChild(ballSprite);

var ball:b2Body = world.CreateBody(ballDef);                ball.CreateFixture(ballFixtureDef);

            }        }

实现显示外观与刚体的同步

private function aysncSprite():void        {//遍历物理世界的所有刚体,此处为何如此遍历请参考Manual            //如果你已经给外观指定了变量,就不用遍历,直接调用变量            var body:b2Body = world.GetBodyList();while(body!=null)            {if(body.GetDefinition().userData is Sprite)                {var ballSprite:Sprite = body.GetDefinition().userData as Sprite;                    ballSprite.x = body.GetPosition().x * PIXEL_TO_METER;                    ballSprite.y = body.GetPosition().y * PIXEL_TO_METER;                    ballSprite.rotation = body.GetAngle() * (180 / Math.PI);                }                body = body.GetNext();            }        }

在handleEnterframe方法中实现同步,并取消Box2D的debug绘制。

private function handleEnterFrame(evt:Event):void        {//更新鼠标位置            UpdateMouseWorld();//不断调用鼠标拖动方法            mouseDrag();

var timeStep:Number = 1/30;var velocityInterations:int = 10;var positionIterations:int = 10;

            world.Step(timeStep,velocityInterations,positionIterations);//同步显示对象和刚体            aysncSprite();//在2.1版本清除力,以提高效率            world.ClearForces();//绘制//            world.DrawDebugData();        }

下载源码

转载于:https://www.cnblogs.com/jinglehit/archive/2012/01/05/2313174.html

Box2D教程3-刚体绑定外观相关推荐

  1. Box2D教程5-碰撞检测

    Box2D教程1-创建碰撞世界 Box2D教程2-鼠标交互 Box2D教程3-刚体绑定外观 Box2D教程4-复杂刚体的复杂外观 Box2D教程5-碰撞检测 之前我们已经了解了如何通过Box2D创建一 ...

  2. Cocos2d Box2D之浮动刚体

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. b2_kinematicBody 运动学物体在模拟环境中根据自身的速度进行移动.运动学物体自身不受力的作用.虽然用户可以手动移动它,但是通 ...

  3. 【COCOS2DX-BOX2D游戏开发之二】 Box2d教程链接

    Box2D C++ 教程-开发环境设置(iPhone) DEC  31 posted in box2d-tutorials Box2D C++ 教程-连接器-平移 DEC  28 posted in  ...

  4. Box2D中切割刚体效果的实现一览(二)

     我们继续来实现切割效果. 我们现在有了切割线和多边形,可以利用Box2d的射线投射(RayCast)来检测切割线和多边形的交点(入射点).在Box2d中通过定义b2RayCastCallback ...

  5. Android开发之最新Android Studio推送代码到最新GitHub教程 | Android Studio绑定GitHub | AS令牌登录GitHub | 创建GitHub令牌

    现在在AS上面不建议使用密码登录GitHub,官方推荐使用令牌登录.方法也很简单 1.登录GitHub后打开下面的网址 https://github.com/settings/tokens 2.选择右 ...

  6. python box2d 教程_python下的Box2d物理引擎的配置

    I come back! 由于已经大四了,正在找工作 导致了至今以来第二长的时间内没有更新博客.向大家表示道歉 前言 Box2d物理引擎 Box2d是一款开源的2d物理引擎,存在很多的版本,C++,J ...

  7. python box2d 教程_适合初学者的强化学习教程(1): python使用gym实践和注意事项

    作者:知乎@Ai酱 安装步骤和报错问题 安装 pip install gym 报错 AttributeError: module 'gym.envs.box2d' has no attribute ' ...

  8. 微信开发教程:用户账号绑定到微信公众号的方法分享

    最近由于工作需要,接触了微信公众号的开发.业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能.我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上 ...

  9. pyqt5教程11:绘制外观

    Painting in PyQt5 PyQt5 绘画系统能够渲染矢量图形.图像和基于轮廓字体的文本.当我们想要更改或增强现有小部件时,或者如果我们从头开始创建自定义小部件时,应用程序中需要绘画.为了进 ...

最新文章

  1. linux 由一个文件夹复制到另外一个文件夹
  2. 牛逼,国产开源的远程桌面火了,只有9MB,支持自建中继器!
  3. 安卓上的微软 Edge 浏览器新增支持长截图
  4. 产品成功之后的品牌策略
  5. SpringBoot笔记:SpringBoot2.3集成Logback日志组件配置
  6. [BZOJ 2243] 染色
  7. 再见DTC,你好Christmas Day
  8. 从iPhone诞生看物联网 10年后将无所不在
  9. The summary of Interview
  10. 基于linux在线预览
  11. 计算机课后感400字,观后感400字
  12. 【瓦片地图】瓦片地图坐标转换
  13. Kernel 日志缓存大小修改
  14. 特别篇:公主,快放开那只巨龙
  15. LCD1602 电子时钟(时间日期温度显示)
  16. 基于SSM+SpringBoot《校园二手交易平台项目》实战开发教程(附论文及源码)-毕业设计
  17. Goolge Colab免费GPU服务器使用教程
  18. Texlive配置华文新魏字体
  19. jnz和djnz_第3章单片机指令系统_练习
  20. HTML学习笔记 2

热门文章

  1. Spring2 Hibernate3 Junit 应用示例1
  2. Reading Club Questions Feedback
  3. 如何做一份出色的竞品分析?(一)
  4. 微信公众平台:反正公众号的一切操作都从这里入手!
  5. 【转】汇编语言学习笔记一:CS和IP寄存器
  6. C# StopWatch的BUG????
  7. 【转】SVN 与 GIT 详细对比
  8. iOS 地图定位 定位
  9. Flutter入坑分享
  10. 6. ZooKeeper访问控制列表