Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

      cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk。我目前使用的是最新版的cocos2dx 3.1.1。引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件。

  在2.x版本的cocos中,使用物理引擎的步骤十分繁琐。但在3.x版本中变得非常方便了。我这次的学习目标是制作一个打砖块的小游戏。

  首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景。

 

Scene::initWithPhysics()

 

这个方法能让你的场景具备创建物理世界的基本条件,接下来我们设置这个屋里世界的重力条件,因为打砖块游戏中不需要重力的影响,所以我们把该场景里的重力设置为0:

PhysicsWorld* world = getPhysicsWorld();
world->setGravity(Vec2(0,0));

  然后我们要给这个物理世界创造一个边界,便于我们观察效果,我的做法是把物理世界的scene和游戏逻辑的实现分开,新建一个继承自layer的类来写游戏逻辑:

  这是头文件:

 1 #include "Util.h"
 2 
 3 #ifndef __FristGame__GameLayer__
 4 #define __FristGame__GameLayer__
 5 
 6 class GameLayer:public Layer
 7 {
 8 public:
 9     Sprite* ball;
10     Sprite* paddle;
11     Sprite* edgeSp;
12     Sprite* prop;
13     PhysicsBody* ballBody;
14     TMXTiledMap* map;
15     
16     CREATE_FUNC(GameLayer);
17     bool init();
18     
19     void loadPhysicsBody();//加载物理世界的边界
20     void loadTileMap();//加载使用tiledmap地图编辑器制作的地图
21     void loadProp();//加载碰撞特定砖块会掉落的道具
22     void update1(float dt);//打开一个定时器
23     void contact();//碰撞事件注册
24 };
25 #endif /* defined(__FristGame__GameLayer__) */

  小提示:在3.2版本的物理世界中我们不能使用scheduleupdate()函数,似乎body(刚体)的运动是在update里处理的,一旦我们重写了这个函数,物理世界中的小球就不再运动了。所以我们另外设置一个定时器update1来使用。

  这是cpp文件:

  1 #include "GameLayer.h"
  2 bool GameLayer::init()
  3 {
  4     loadTileMap();
  5     loadPhysicsBody();
  6     return true;
  7 }
  8 void GameLayer::loadPhysicsBody()
  9 {
 10     auto visibleSize = Director::getInstance()->getVisibleSize();//取得当前屏幕的尺寸size
 11     auto origin = Director::getInstance()->getVisibleOrigin();
 12     
 13     edgeSp = Sprite::create();//创建一个精灵
 14     auto boundBody = PhysicsBody::createEdgeBox(visibleSize,PhysicsMaterial(0.0f,1.0f,0.0f),3);//edgebox是不受刚体碰撞影响的一种刚体,我们用它来设置物理世界的边界
 15     ed
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值