今回は物理演算を利用できるシーンについて紹介します。
cocos2d-xはChipmunk2Dという物理エンジンをとりいれています、物理エンジンとはゲーム内で物がぶつかったり、落下したりといった運動を表現できる仕組みを提供するものをいいます。
想像しやすい利用場面としてはジャンプや物を投げる、ブレーキで摩擦が発生し停止するなどが挙げられます。こういった処理は0から実装しようとした場合とても大変ですが今回紹介するPhysicsSceneを利用すれば簡単に処理を行えるようになります。まずはそのシーンの生成の仕方についてコードで紹介します。
Scene* MainScene::createScene(){ //物理演算のできるシーンを生成 auto scene=Scene::createWithPhysics(); //物理法則の設定を取得 auto world=scene->getPhysicsWorld(); //重力設定 world->setGravity(Vec2(0,-10)); //速度設定 world->setSpeed(5.0f); //レイヤー生成 auto layer=MainScene::create(); //物理シーンにレイヤー貼り付け scene->addChild(layer); //物理オブジェクトの当たり判定などを可視化できる設定 scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); return scene; }
シーンの生成の部分を少し変えるだけで物理シーンを作成することができます。これでこのシーンに物を置くと自然と落下したり摩擦で停止したりします。また次章で紹介しますが物理演算の対象となるオブジェクトを剛体といいます。
物理シーンの生成時には重力と速度を設定しましたが、剛体の生成時には個別に重力を受けるか、摩擦力があるかなどの設定をすることができるので動かしたくない障害物や、重力を受けるプレイヤーなどと振り分けて設定できるので様々な場面で利用できます。