. 瘸腿蛤蟆笔记-cocosd-x-. Boxd物理引擎Ray-cast代码介绍【DOC精选】.docxVIP

. 瘸腿蛤蟆笔记-cocosd-x-. Boxd物理引擎Ray-cast代码介绍【DOC精选】.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
瘸腿蛤蟆笔记38-cocos2d-x-3.2 Box2d物理引擎Ray-cast代码介绍瘸腿蛤蟆原创笔记,欢迎转载,转载请标明出处:上篇回顾本篇名言:一个客观的艺术不只是用来看的,而是活生生的。但是你必须知道如何去靠近它,因此你必须要做静心。 [OSHO] 上篇中,蛤蟆学习了Box2d物理引擎中的Box2dTestBed代码结构,接下去蛤蟆继续学习这个Box2d引擎的使用,这次我们接着37篇的Ray-cast 使用,来介绍Ray-cast的原理。理论介绍我们先学习这次用到的理论知识,主要是一些类和函数介绍:b2ContactListener类,这个b2ContactListener类(有源代码提供,在b2WorldCallbacks.h文件中)是获取碰撞信息。可以使用这些信息用来声音和游戏逻辑。我们可以通过在时间步之后遍历得到接触结果。但是因为分布执行可能会错过一些接触。此外我们在一个时间步中会得到很多回调函数(我们需要高效的回调函数)。我们不能在这个回调函数中创建或摧毁Box2D的实体。classb2RayCastCallback这个类是ray casts.的回调函数类。主要实现如下这个函数virtualfloat32 ReportFixture(b2Fixture* fixture, constb2Vec2 point,constb2Vec2 normal, float32 fraction) = 0;参数 Fixture表示被ray击中的fixture,point表示初始交点, normal法向相量。在查询中发现FIXTURE是被调用,返回-1,0,fraction 或者1 。-1表示忽视,0 表示停止ray case,Fraction 表示从这个点截断, 1 表示不截断 ray 并继续。classDestructionListener : publicb2DestructionListener在删除Body,隐性删除Fixture和Joint的时候会被调用。classGLESDebugDraw : publicb2Draw这个类实现 DEBUG画图调用。在每个时间步内都会被调用。这个Draw类被继承和注册,提供在游戏中画物理实体以供调度。由于Box2D中所有对象都是不可见的,要创建可见对象我们得用刚体定义中的userData属性来创建自己的图形,如果不创建自己的图形,则用b2DebugDraw类来实现物体的可见,方便调试。void DrawDebugData();这个函数用来调用绘画shapes,其他debug数据。Draw函数,是Node类的函数。virtual void draw(Renderer?*?renderer,const?Mat4??transform,bool?transformUpdated?)这个函数是Node类的虚函数,所有继承于Node的函数都可以去实现它。官方解释如下:重写这个方法来绘制你自己的节点。以下的GL状态是默认开启的:glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_COLOR_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);glEnable(GL_TEXTURE_2D);?并且你不能够关闭他们在绘制完你的节点之后。但是如果你开启了其他的GL状态,那么你要关闭他们在绘制完你的节点之后。CustomCommand这个类继承于RenderCommand如下图1所示:RenderCommand是RenderCommand体系的基类.渲染器(Renderer) 指定如何渲染RenderCommands对象.具体步骤1、定义一个碰撞类RayCastNew首先我们创建一个RayCastNew.h文件中,定义一个类RayCastNew,让其继承于b2ContactListener(该类再做理论介绍了已经)。在该类中定义一些常用然后定义一个析构函数:析构函数主要作用是创建一个物理世界,最后增加一个Step函数用于每帧的世界变化。这个类如下:classRayCastNew : publicb2ContactListener{public:enum{e_maxBodies = 256//定义最多Body数量};enumMode//定义3个模式{e_closest,e_any,e_multiple};RayCastNew()//析构函数,主要是创建物理世界,只调用一次,完成第一次的世界构建。{b2Vec2 gravity;gravity.Set(0.0f, -10.0f);//定义一个重力向量m_world = newb2World(gravity);//通过向量创建一个物理世界{b

文档评论(0)

taotao0c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档