- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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的实体。class b2RayCastCallback这个类是 ray casts. 的回调函数类。主要实现如下这个函数virtual float32 ReportFixture(b2Fixture* fixture, const b2Vec2 point,const b2Vec2 normal, float32 fraction) = 0;参数 Fixture表示被ray击中的fixture,point表示初始交点, normal法向相量。在查询中发现FIXTURE是被调用,返回-1,0,fraction 或者1 。-1表示忽视,0 表示停止ray case,Fraction 表示 从这个点截断, 1 表示不截断 ray 并继续。class DestructionListener : public b2DestructionListener 在删除Body,隐性删除Fixture和Joint的时候会被调用。class GLESDebugDraw : public b2Draw 这个类实现 DEBUG画图调用。在每个时间步内都会被调用。这个Draw类被继承和注册,提供在游戏中画物理实体以供调度。由于Box2D中所有对象都是不可见的,要创建可见对象我们得用刚体定义中的userData属性来创建自己的图形,如果不创建自己的图形,则用b2DebugDraw类来实现物体的可见,方便调试。void DrawDebugData(); 这个函数用来调用绘画shapes,其他debug数据。Draw函数,是Node类的函数。virtual void draw(/doc/cocos2d-x-3.0/d5/d6d/classcocos2d_1_1_renderer.htmlRenderer?*?renderer,const?/doc/cocos2d-x-3.0/dc/dce/class_mat4.htmlMat4??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 这个类继承于/doc/cocos2d-x-3.0/d6/d9a/classcocos2d_1_1_render_command.htmlRenderCommand 如下图1所示:/doc/cocos2d-x-3.0/d6/d9a/classcocos2d_1_1_render_command.htmlRenderCommand是/doc/cocos2d-x-3.0/d6/d9a/classcocos2d_1_1_render_command.htmlRenderCommand体系的基类.渲染器(/doc/cocos2d-x-3.0/d5/d6d/classcocos2d_1_1_renderer.htmlRenderer) 指定如何渲染RenderCommands对象.具体步骤1、定义一个碰撞类RayCastNew首先我们创建一个RayCastNew.h文件中,定义一个类RayCastNew,让其继承于b2ContactLi
原创力文档


文档评论(0)