我们将完成一个简单的实例来介绍cocos物理的引擎的基本使用:
我们要实现的是一个小球不停的在屏幕中进行弹跳,没有重力,完全弹力。
- 首先创建一个场景,该场景不能使普通的场景,必须要先创建物理场景才能在该场景中加入物理的元素,比如刚体(就是我们的小球),重力,摩擦力,弹力。
Scene*GameScene::createScene()
{
//创建一个物理场景。
mScene = Scene::createWithPhysics();
mScene->getPhysicsWorld()->setGravity(Vec2(0, 0));
//debug模式,能更好的显示我们的刚体,大家删除这条代码也行。
mScene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
//创建该类,是一个layer。
auto gameSceneLayer = GameScene::create();
mScene->addChild(gameSceneLayer);
return mScene;
}
接下来创建球和物理边界。
bool GameScene::init()
{
//创建一个node,来载入我们即将创建的物理边界。
auto border = Node::create();
//把物理边界载入node当中。创建一个edgeBox相对于我们实例当中4周的墙壁,PhysicsMaterial(0.1, 1, 0))这个是这个物理边界的材料,第一个是质量设置为0.1,弹力为1,也就是完全弹力。摩擦力为0.还是很好理解。
border->setPhysicsBody(PhysicsBody::createEdgeBox(Size(
VISIBLESIZE.width, VISIBLESIZE.height), PhysicsMaterial(0.1, 1, 0)));
//将border设置为屏幕中心,刚好边界就是整个屏幕。
border->setPosition(VISIBLESIZE.width / 2, VISIBLESIZE.height / 2);
addChild(border);
//下面我们加入一个球体,在游戏设计中都称作刚体。
//创建一个精灵 ,是一个圆球。
auto sprite = Sprite::create("Pea.png");
//创建一个球型刚体。第一个参数是半径,第二个是无力材料。
auto body = PhysicsBody::createCircle(sprite->getContentSize().width/2, PhysicsMaterial(0.1, 1, 0));
//将精灵绑定这个球体,这个精灵相当于拥有了球的物理属性。
sprite->setPhysicsBody(body);
sprite->setPosition(position);
Vec2 velocity(360,720);
//设置精灵的初始速度。
sprite->getPhysicsBody()->setVelocity(velocity);
addChild(sprite);
return true;
}
这样就OK了 ,就实现了上述事例。用起来还是非常方便的。注意不要把刚体的半径设置太小,否则会出来刚体穿透问题。刚体穿透大家可以百度,cocos3.7 在physicsTest 中也给出了解决方案。