Coco2d-x3.8.1制作飞翔的小鸟(上)
发表于2018-03-19
Cocos引擎在游戏开发中也是用的比较广泛,像html5游戏开发、Android游戏开发Cocos引擎肯定是首选,为了让开发者可以熟练使用Cocos引擎,本系列就以制作飞翔的小鸟为例给大家进行介绍,首先和大家介绍在制作飞翔的小鸟过程中如何创建物理场景。
重点:
1. 对于一些简单的功能这里就忽略了,直接引入游戏核心的代码实现。
2. 在cocos2d-x3.0以上版本对Box2d和chumk物理引擎进行整合,使用起来是很方便的,这里通过flappBird对游戏进行测试。
2. 在cocos2d-x3.0以上版本对Box2d和chumk物理引擎进行整合,使用起来是很方便的,这里通过flappBird对游戏进行测试。
在主场景中初始化该场景为物理场景
//playGameScene.cpp Scene* playGameScene::createScene() { Scene* scene=Scene::createWithPhysics(); scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//调试物理粒子 scene->getPhysicsWorld()->setGravity(Vec2(0,-1000));//使用矢量值来表示重力 playGameScene* pgs=playGameScene::create(); scene->addChild(pgs); return scene; }
另外创建一个类(类名为edgeWord)继承于cocos2d::Node,用于构建物理世界,以下是init()函数的方法实现
//edgeWord.cpp bool edgeWord::init() { if (!Node::init()) { return false; } Size visibleSize=Director::getInstance()->getVisibleSize(); auto land=Sprite::create("land.png"); Size landSize=land->getContentSize(); this->setPhysicsBody(PhysicsBody::createEdgeBox(Size(visibleSize.width,visibleSize.height-landSize.height))); this->setContentSize(Size(visibleSize.width,visibleSize.height-landSize.height)); this->setPosition(visibleSize.width/2,visibleSize.height/2+landSize.height/2); return true; }
接而和创建物理世界一样,创建主角和障碍物
//heroBird.cpp bool heroBird::init() { if (!Sprite::init()) { return false; } srand(time(NULL));//获取随机种子 int bird_type=rand()%3; Size visibleSize=Director::getInstance()->getVisibleSize(); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Plist1.plist","Plist1.png"); switch (bird_type) { case 0: this->initWithSpriteFrameName("bird0_0.png");//初始精灵纹理图片 break; case 1: this->initWithSpriteFrameName("bird1_0.png"); break; case 2: this->initWithSpriteFrameName("bird2_0.png"); break; default: break; } this->setPosition(80,visibleSize.height/2); this->setPhysicsBody(PhysicsBody::createBox(Size(30,25))); this->getPhysicsBody()->setRotationEnable(false); this->getPhysicsBody()->setContactTestBitmask(1);//碰撞信号检测 return true; }
添加障碍物
//doubleBlocks doubleBlocks* doubleBlocks::createDoubleBlocks(cocos2d::Layer* layer) { doubleBlocks* blocks=new doubleBlocks(); blocks->autorelease(); if (!blocks->init(layer)) { return NULL; } return blocks; } bool doubleBlocks::init(cocos2d::Layer* layer) { if (!Node::init()) { return false; } block_up=obstaclesBlock::createBlock(0); layer->addChild(block_up); block_down=obstaclesBlock::createBlock(1); layer->addChild(block_down); return true; }
接而返回playGameScene.cpp的init()函数添加物理节点
//playGameScene.cpp bool playGameScene::init() { if(!Layer::init()) { return false; } //添加主角 m_heroBird=heroBird::create(); this->addChild(m_heroBird);
添加物理世界
m_word=edgeWord::create(); this->addChild(m_word); return true; } void playGameScene::addBlocks(float dt) { Size visibleSize=Director::getInstance()->getVisibleSize();
添加障碍物
obstaclesBlock* block_up=obstaclesBlock::createBlock(0); obstaclesBlock* block_down=obstaclesBlock::createBlock(1); this->addChild(block_up); this->addChild(block_down); int heigth=rand()%200-20; int clearance=90;//两障碍水管的间隙 block_down->setPosition(visibleSize.width,heigth); block_up->setPosition(visibleSize.width,heigth+320+clearance); }
对于Coco2d-x3.8.1制作飞翔的小鸟的上半部分就和大家介绍这么多,相信大家现在也都知道怎么创建物理场景了吧,接下来就和大家介绍下半部分碰撞事件以及触摸事件的处理。