位置: 编程技术 - 正文

COCOS2DX学习之Box2D物理引擎-物体和相互作用(cocos2dx 3.17)

编辑:rootadmin

推荐整理分享COCOS2DX学习之Box2D物理引擎-物体和相互作用(cocos2dx 3.17),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx 3.17,cocos2d-x教程,cocos2d教程,cocos 2d x,cocos2dx4.0教程,cocos2dx4.0教程,cocos2dx4.0教程,cocos2dx4.0教程,内容如对您有帮助,希望把文章链接给更多的朋友!

1、创建一个静态物体

创建一个静态物体应该很简单,在头文件生命一下要创建新物体的函数,然后在cpp文件中实现它即可。

具体的时候先过程,首先要用createbody函数创建一个物体,然后定义一个b2bodydef变量,指定一下这个变量的type还有position。这样的话一个最简单的静态物体就算是创建好了。

2、物体的相互作用

但是我们虽然创建了两个物体但是在运行的时候发现依然没有看到静止的物体挡住了动态运动的物体,这就是两个物体并没有发生相互作用。

为了让两个物体发生相互作用,我们要设置一个fixture

上面的代码片段还有解释应该能说明为什么要给一个物理设置fixture,body看起来是很单一的,如果想让他实现真实物理世界中的一些特性就要设置fixture。

fixture主要是设置物体的一些性质,和之前创建物体时候的bodydef的概念类&#;。

在用b2PolygonShape shape;这句话指定了物体的形状是多边形之后,还要对应的设置这个物体的位置。利用的就是setasbox.SetAsBox函数接收半个宽度和半个高度作为参数,也就是说,设置出来的这个物体的尺寸是里面的参数的两倍大小。

[cpp] view plaincopyprint?void HelloWorld::addrect() { b2BodyDef def; b2FixtureDef fixdef; b2PolygonShape shape; b2Body *b = word->CreateBody(&def); auto sprite = Sprite::create(); def.position = b2Vec2(3,5); def.type = b2_dynamicBody; shape.SetAsBox(0.5,0.5); fixdef.density = 1; fixdef.friction = 0.3; fixdef.shape = &shape; b->CreateFixture(&fixdef); addChild(sprite); sprite->setTextureRect(Rect(0,0,0.5*2*RATIO,0.5*2*RATIO)); b->SetUserData(sprite); } void HelloWorld::addground() { b2BodyDef def; b2PolygonShape shape; def.position = b2Vec2(/RATIO,0); shape.SetAsBox(/RATIO,0.5); def.type = b2_staticBody; b2Body * body = word->CreateBody(&def); b2FixtureDef fixdef; fixdef.density = 1; fixdef.friction = 0.3; fixdef.shape = &shape; body->CreateFixture(&fixdef); } 两个函数,上面的一个是创建动态的物体然后下落,下面这个函数是创建一个地板,是静态物体。之所是设置fixtrue就是为了能让物体之间产生相互的作用。将物体的属性完备一些,就可以出现一些真实物理世界的情况。

3、创建漂浮的物体

创建漂浮的物体其实也很简单,只不过是改变一下这个物体的类型为b2_kinematicBody即可。漂浮物体和静止物体是不一样的,静止物体是绝对不动的。漂浮物体的物体是不受物理世界的重力控制的。如果想让漂浮物体真正起到漂浮的效果要怎么办呢,很简单,给这个物体设置一个初速度就可以了。

def.linearVelocity = b2Vec2(1,0);设置一个只沿着x 轴方向的初速度。

COCOS2DX学习之Box2D物理引擎-物体和相互作用(cocos2dx 3.17)

4、物体的碰撞检测

一般来说,侦听一个事件都需要一个侦听器.

b2ContactListener 这个类主要就是用来监听一些物体之间的接触的。通过实现 b2ContactListener 你就可以收到接触数据。接触监听器支持几种事件: 开始(begin),结束(end), 求解前(pre-solve), 求解后(post-solve)。

Begin事件

当两个fixture开始有重叠时,事件会被触发。传感器和非传感器都会触发这事件。这事件只能在时间步内(译注: 也就是b2World::step函数内部)发生。

End事件

当两个fixture不再重叠时,事件会被触发。传感器和非传感器都会触发这事件。当一个body被摧毁时,事件也有可能被触发。所以这事件也有可能发生在时间步之外。

Pre-Solve事件

在碰撞检测之后,但在碰撞求解之前,事件会被触发。这样可以给你一个机会,根据当前情况来决定是否使这个接触失效。 举个例子,在回调中使用b2Contact::SetEnabled(false),你就可以实现单侧碰撞的功能。每次碰撞处理时,接触会重新生效,所以你在每一个时间步 中都应禁用那个接触。由于连续碰撞检测,pre-solve事件在单个时间步中有可能发生多次。

为了测试,我准备用begin来检验这个监听器的效果。

动态的物体会下落,那么下落在地板上的时候,肯定会发生接触,这样就可以用这个类的一些方法来检测了。SetContactListener利用这个函数创建一个监听器,参数就是我们当前的这个类,this。之后便可以重新实现void HelloWorld::BeginContact(b2Contact* contact).

重新实现如下

[cpp] view plaincopyprint?void HelloWorld::BeginContact(b2Contact* contact) { if(contact->GetFixtureA()->GetBody() == groundbody||contact->GetFixtureB()->GetBody() == groundbody) { log("have a body in ground"); } }

contact对象可以获取到接触的两个fixture进而获取到他们的实体,如果有一个是地板的话,那么就说明那个自由下落的动态物体和地板发生碰撞了,这样就显示一个消息

原文来自:

cocos2dx加libevent库 路径:$path=cocos2dx/platform/third_party1.win将生成的libevent_core.lib,libevent_extras.lib放到$path/win/libraries中头文件event2和event-config.h放到$path/win/libevent中VS中设置

cocos2dx面试找工作 本人做医院应用,用cocos2dx做的,很多人会吐槽的我知道,但就是那样,我做了,前天去面试了家游戏公司,现分享下面试经验。.3.7,星期六。公司约

Cocos2dx2.2.1中单选按钮的实现 Cocos2dx2.2.1中单选按钮的实现背景最近做一个学长给的任务,里面需要单选按钮的控件。不知道是我没好好找还是什么原因,cocos2dx中好像没有提供(我

标签: cocos2dx 3.17

本文链接地址:https://www.jiuchutong.com/biancheng/368966.html 转载请保留说明!

上一篇:cocos2dx的坑 ---- autorelease不release(cocos2d怎么用)

下一篇:cocos2dx加libevent库

  • 职工福利费的税额
  • 材料暂估可以跨年度吗
  • 公司注销后虚开还查吗
  • 企业收到财政局退款需要开票吗
  • 固定资产清理哪方登记增加
  • 如何查询对方是不是一般纳税人
  • 签订合同后付款
  • 收到退税如何记账
  • 用进项税冲抵当月增值税的会计分录
  • 政府补贴流程
  • 期间费用包括哪三种
  • 土地增值税预征率
  • 股息交个人所得税怎么交
  • 预付账款是
  • 材料折扣率
  • 权益资本成本率计算
  • 公司利润不分配可以怎么处理
  • 存货自然灾害损失进项税
  • 境外企业开票没有税号怎么办?
  • 开专票需要备注吗
  • 免交的增值税计入什么科目
  • 劳务分包发票税率是多少2020
  • 企业计提的安全生产费用年末应如何处理
  • 企业涉及预计负债的主要事项包括
  • 小企业的费用应当在发生时计入当期损益
  • 个人其他应收款在贷方表示什么
  • 能开运费发票吗?
  • 腾讯电脑管家中蓝牙在哪
  • 房地产企业预售房产怎么缴税
  • 税务登记后每个月交什么钱
  • phpstorm ftp
  • 分配结转制造费用时借方科目
  • lsass.exe在哪个文件夹
  • 企业规模扩大后更易于管理吗
  • 企业工资薪金和职工福利费等支出税前扣除问题的公告
  • 莫纳皮拉
  • 解决烧心最快方法
  • 光下的村庄环境描写
  • 旅行费发票
  • 【Vue】踩坑日记:Scoped下动画无效,曾经以为百利而无一害的Scoped,也有自己的限制
  • python 构建
  • 酒店的销售费用和管理费用如何进行区分
  • 跨年坏账准备转回
  • 所得税在什么情况下免税
  • python用途
  • 实际发生坏账损失不影响应收账款
  • 公司人员工资计算方法
  • 财务软件怎么做红冲分录
  • 小规模纳税人的个人所得税怎么算
  • 法定盈余公积的作用
  • 毛利润和纯利润
  • 租赁中承租人的会计分录
  • 收据盖发票专用章会被处罚吗
  • 研发支出资本化支出在资产负债表哪里体现
  • 私企固定资产报废程序
  • 建造厂房流程
  • 工程预缴税款流程
  • 销售方开具的红字专票怎么入账
  • 旅游业最新增值税政策
  • 长期待摊费用是经营性资产吗
  • mysql必知必会mobi
  • mac怎么自动清理垃圾软件
  • 开源操作系统总结
  • win10一年更新一次
  • ip冲突不能上网怎么解决
  • win10 mobile 1709
  • xp系统怎样阻止脱机窗口弹出
  • 关机你的电脑遇到问题,需要重新启动,我们只收集
  • window10分屏显示
  • jquery tagname
  • linux中的shell编程
  • dos判断变量是否为空
  • jquery教程chm
  • python计算字符串长度的程序
  • 拆迁户契税减免政策去哪里办理
  • 增值税抵扣联怎么装订
  • 小型贸易公司怎么赚钱
  • 青海省地方税务局领导名单
  • 北京市地税局第一稽查局郭洪鑫
  • 金水区地税局办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设