[计算机] cocos2D-x初探学习笔记(31)2.1新特性CCPhysicsSprite

查看:1877 |回复:48 | 2017-6-15 13:16:38

您需要 登录 才可以下载或查看,没有账号?注册

x
本篇文章继续介绍cocos2D-x 2.1的新特性:CCPhysicsSprite 和CCPhysicsDebugNode,从名称上就可以看出来这两个类是和物理引擎相关的类,和之前介绍的CCDrawNode一样,CCPhysicsSprite 没有提供新功能,而是对之前功能的一个封装。
CCPhysicsSprite 定义一个物理类绑定的精灵,它继承自CCSprite精灵类,它的使用来看一下TestCpp项目,CCPhysicsSprite 支持目前cocos2D-x中的box2D和chipmunk两个物理引擎,但是你只能使用定义预编译的宏变量CC_ENABLE_CHIPMUNK_INTEGRATION 或CC_ENABLE_CHIPMUNK_INTEGRATION中的一个来使用box2D或chipmunk其中的一个,你可以通过两种方式来设置CC_ENABLE_CHIPMUNK_INTEGRATION 或CC_ENABLE_CHIPMUNK_INTEGRATION的值,一种是在xcode的building setting中设置,如图所示
1358670786_5537.jpg

另一种是在Config.h文件中设置,如图所示
1358670873_9837.jpg
对于TestCpp这个项目,这里需要说一句就是把引擎变成box2D后编译项目会报错,是因为没有对ChipmunkTest项目加入预编译的判断,对于该部分,我做了修改,下载地址:http://download.csdn.net/detail/bill_man/5012842
回到正题,介绍CCPhysicsSprite 和CCPhysicsDebugNode的使用,CCPhysicsSprite 只需要按照CCSprite的方法定义,然后将之前按照Chipmunk方式定义的body设置给精灵就可以了,代码如下:
CCPhysicsSprite *sprite = CCPhysicsSprite::createWithTexture(m_pSpriteTexture, CCRectMake(posx, posy, 85, 121));
parent->addChild(sprite);
sprite->setBody(body);
sprite->setPosition(pos);
可以打开2.1 之前的版本的相同位置的文件(名称可能不同),可以看到当时我们要自己定义一个精灵类并且完成坐标的对应,有了CCPhysicsSprite之后就会更方便的使用。
CCPhysicsDebugNode是为了更方便debug的类,将它设置为显示之后,在场景内定义的精灵的碰撞形状块就显示出来了,如图所示
在这个例子中,点击Toggle debug就可以切换CCPhysicsDebugNode的显示和隐藏,定义CCPhysicsDebugNode的代码如下:
m_pDebugLayer = CCPhysicsDebugNode::create(m_pSpace);

this->addChild(m_pDebugLayer, Z_PHYSICS_DEBUG);

传入的参数是cpSpaceNew类实例,默认创建的一个CCPhysicsDebugNode是显示的,可以通过setVisible函数来控制它的显示与隐藏,需要说明的是CCPhysicsDebugNode目前只支持Chipmunk。
CCPhysicsSprite在Box2D中的使用和Chipmunk类似(在TestCpp中的Box2DTest中),只是多了一个函数需要设置,就是PTMRatio,即“cocos2D-x中的像素到box2D中的meters单位的转换比率”
CCPhysicsSprite *sprite = CCPhysicsSprite::createWithTexture(m_pSpriteTexture,CCRectMake(32 * idx,32 * idy,32,32));
parent->addChild(sprite);
sprite->setBody(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition( ccp( p.x, p.y) );
在Box2DTest中还保留着之前为了使用box2D而定义的精灵类的代码,可以对比一下现在的使用,确实是方便很多了
对于CCPhysicsSprite的使用,有一些限制:
1)Scale 和Skew属性是忽略的,也就是说setScale或者setSkew后碰撞的形状块大小等不会改变。
2)Position 和rotation属性是有效的,如果你手动设置Position 和rotation,负责控制碰撞的形状块的位置和旋转角度会改变。
3)一个项目中同时只能支持Chipmunk和Box2D中的一个

评分

参与人数 1元素币 +8 展开 理由
狼之独步 + 8 为楼主点赞~

查看全部评分

2017-6-15 13:16:38  
 赞 赞 1

使用道具 登录

48个回答,把该问题分享到群,邀请大神一起回答。
2#
听说有cocos2D教程
回复 收起回复
2017-6-15 15:09:48   回复
 赞 赞 1

使用道具 登录

3#
资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
2017-6-16 17:27:07   回复
 赞 赞 1

使用道具 登录

4#
学习了
回复 收起回复
2017-6-27 11:07:54   回复
 赞 赞 1

使用道具 登录

5#
教程很详细
回复 收起回复
2017-6-30 10:25:53   回复
 赞 赞 1

使用道具 登录

6#
6eaq
回复 收起回复
2017-7-24 10:18:54   回复
 赞 赞 1

使用道具 登录

7#
不错的资源,谢谢分享啦。。。
回复 收起回复
2017-8-14 09:28:34   回复
 赞 赞 1

使用道具 登录

8#
··········
回复 收起回复
2018-10-17 16:06:37   回复
 赞 赞 1

使用道具 登录

9#
回复 收起回复
2018-10-17 19:03:08   回复
 赞 赞 1

使用道具 登录

10#
带你赚币带你飞,元素里面有正妹
回复 收起回复
2018-10-18 10:18:53   回复
 赞 赞 1

使用道具 登录

11#
6666666
回复 收起回复
2018-10-18 21:49:09   回复
 赞 赞 1

使用道具 登录

12#
不错的资源
回复 收起回复
2018-10-19 09:36:09   回复
 赞 赞 1

使用道具 登录

13#
非常好的东西,谢谢分享
回复 收起回复
2018-10-19 09:42:45   回复
 赞 赞 1

使用道具 登录

14#
谢谢楼主分享
回复 收起回复
2018-10-19 15:47:46   回复
 赞 赞 1

使用道具 登录

15#
这么好的资源只有微元素才会有!感谢楼主分享!
回复 收起回复
2018-10-24 23:11:35   回复
 赞 赞 1

使用道具 登录

16#
谢谢分享
回复 收起回复
2018-10-25 09:18:38   回复
 赞 赞 1

使用道具 登录

17#
谢谢分享
回复 收起回复
2018-10-25 09:18:41   回复
 赞 赞 1

使用道具 登录

18#
感谢楼主分享
回复 收起回复
2018-10-27 13:40:42   回复
 赞 赞 1

使用道具 登录

19#

谢谢分享
回复 收起回复
2018-10-28 00:35:06   回复
 赞 赞 1

使用道具 登录

20#
66666
回复 收起回复
2018-10-28 14:02:33   回复
 赞 赞 1

使用道具 登录

CG 游戏行业专业问题

其他引擎技术程序逻辑文章算法
123下一页
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表