cocos2dx中的物理世界
精灵和碰撞
在没有接触到游戏引擎自带的物理引擎之前,应该怎么检测两个屏幕上的精灵或者说图片是否接触和碰撞,通常会通过坐标,检测两个精灵的坐标是否相交,这样的方法放在游戏引擎里就很蠢。游戏引擎里提供了封装的物理引擎API,通过这些API能更好的模拟显示世界中的物理效果。
如何在引擎的物理世界中进行碰撞
一般分为4步
1.创建物理场景
2.给需要碰撞的精灵设置刚体
3.设置物理属性(摩擦力,密度,重力等待…)
4.设置碰撞相关的掩码
创建游戏中的物理世界
// 一般创建一个场景的时候,这样创建的是一个普通场景
Scene* scene = Scene::create();
// 当需要使用物理引擎的API时第一件事就是通过createWithPhysics()
//创建场景时创建一个物理场景
auto gameScene = Scene::createWithPhysics();
// 通过物理场景对象设置重力的大小以及方向
gameScene->getPhysicsWorld()->setGravity(Vec2(0, -98));
为精灵设置刚体
在创建完物理场景之后,这个场景已经具备和现实世界类似的物理属性(摩擦力,密度,加速度等等…),只不过这些物理属性需要自己设置,不然就都默认为没有,要设置精灵的物理属性必须先给对应的精灵添加刚体
// 假设先创建一个精灵
this->hero = Sprite::create("sprite.png");
this->addChild(this->hero);
// 要让我们的精灵能进行碰撞,需要给对应的精灵添加一个刚体,
// Body也是身体的意思,createBox()是添加一个方块形刚体,
// 引擎中封装了很多简单的刚体还比如createCircle()创建一个圆形刚体
// 下面创建一个方形刚体
auto heroBody = PhysicsBody::createBox(
// 参数1:刚体的形状,因为我准备这张图片也是方形,所以之间
// getContentSize()获得图片大小设置成刚体形状
this->hero->getContentSize(),
// 参数2:刚体的物体特性(密度,弹性系数,摩擦系数)
PhysicsMaterial(10, 0.1, 0.1)