小游戏《贪头蛇》设计场景有: 主菜单、游戏主场景、游戏继续、游戏设置、游戏暂停、关于
进入游戏第一场景,显示该款游戏由哪家工作室或个人开发的
代码:
SnakeSceneManager类用来管理游戏所有场景的切换,包括创建新的场景,切换下一个场景,和关卡场景
OpenLayer类用来创建该场景
CCScene *SnakeSceneManager::createscene() { CCScene *Scene = CCScene::create(); //进入游戏第1个图层 OpenLayer *openlayer = OpenLayer::create();//工作室logo Scene->addChild(openlayer);//加入该场景中 return Scene; }
bool OpenLayer::init() { if (!CCLayer::init()) { return true; } CCSize size = CCDirector::sharedDirector()->getVisibleSize(); CCSprite *sprite1 = CCSprite::create("bn.png");//工作室图片 sprite1->setAnchorPoint(ccp(0.5, 0.5)); sprite1->setPosition(ccp(size.width/2, size.height/2)); //先浅入场景再浅出 CCActionInterval *act1 = CCFadeIn::create(1.5f); CCActionInterval *act2 = act1->reverse(); //完成动作后切换到主菜单页面 sprite1->runAction(CCSequence::create(act1, act2, CCCallFuncND::create(this, callfuncND_selector(OpenLayer::nextmenuscene),NULL), NULL)); this->addChild(sprite1); return true; }切换下一个主菜单场景
void OpenLayer::nextmenuscene(CCNode* pNode, void* pVo) { this->removeChild(pNode); ssm->MenuScene(); }
void SnakeSceneManager::MenuScene() { CCScene *menu = CCScene::create(); SnakeMenuScene *sms = SnakeMenuScene::create();//菜单图层 menu->addChild(sms); CCDirector::sharedDirector()->replaceScene(CCTransitionFadeTR::create(1.5f, menu)); }
主菜单场景
代码:
主菜单场景类SnakeMenuScene,头文件
class SnakeMenuScene:public cocos2d::CCLayer { public: virtual bool init(); CREATE_FUNC(SnakeMenuScene); void newgame(CCObject* pObject);//新游戏按钮回调 void continuegame(CCObject *pObject);//游戏继续按钮回调 void aboutgame(CCObject *pObject);//游戏关于按钮回调 SnakeSceneManager *ssm1; };init()函数,创建这个菜单按钮
if (!CCLayer::init()) { return false; } CCSize size = CCDirector::sharedDirector()->getVisibleSize(); //背景设置 CCSprite *sp1 = CCSprite::create("snake_background.png"); sp1->setAnchorPoint(ccp(0.0, 0.0)); sp1->setPosition(ccp(0, 0)); this->addChild(sp1); SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background.mp3", true); //new game 按钮 CCMenuItemImage *image1 = CCMenuItemImage::create("newgameA.png", "newgameB.png", this, menu_selector(SnakeMenuScene::newgame)); //continue 按钮 CCMenuItemImage *image2 = CCMenuItemImage::create("continueA.png", "continueB.png", this, menu_selector(SnakeMenuScene::continuegame)); //about 按钮 CCMenuItemImage *image3 = CCMenuItemImage::create("aboutA.png", "aboutB.png", this, menu_selector(SnakeMenuScene::aboutgame)); CCMenu *menu = CCMenu::create(image1, image2, image3, NULL); menu->setPosition(CCPointZero); this->addChild(menu);
CCNode *child=NULL; CCArray *pArray = menu->getChildren(); for (int m=0; m<(pArray->count()); m++)//遍历菜单项 { int h ; switch (m)//菜单项间隔 { case 0: h=50; break; case 1: h=0; break; case 2: h=-50; break; } child = (CCNode*)pArray->objectAtIndex(m); child->setScale(0.5f); child->setPosition(size.width/2, size.height+10); CCActionInterval *ac1 = CCMoveTo::create(0.2f, ccp(size.width/2, -40));//起始位置 CCActionInterval *ac2 = CCMoveTo::create(0.2f, ccp(size.width/2, size.height/2+h));//弹回的位置 CCActionInterval *ac3 = CCEaseBackInOut::create(ac2); CCDelayTime *delay = CCDelayTime::create(0.2f*(pArray->count()-m-1));//每个菜单项间隔时间 child->runAction(CCSequence::create(delay, ac1, ac3, NULL)); }
//切换到游戏主场景 void SnakeMenuScene::newgame(CCObject* pObject) { CCLOG("newame..."); ssm1->nextscene(); } void SnakeMenuScene::continuegame(CCObject* pObject) { CCLOG("continuegame..."); } void SnakeMenuScene::aboutgame(CCObject* pObject) { CCLOG("aboutgame..."); }
原文:http://blog.csdn.net/oyangyufu/article/details/29438309