小遊戲《貪頭蛇》設計場景有: 主菜單、遊戲主場景、遊戲繼續、遊戲設置、遊戲暫停、關於
遊戲中的UI都是"東拼西湊'過來,其目的通過編寫小遊戲,體驗遊戲所需要的基本功能、動畫、粒子效果
源碼下載地址:http://download.csdn.net/detail/oyangyufu/7505487
進入遊戲第一場景,顯示該款遊戲由哪家工作室或個人開發的
代碼:
SnakeSceneManager類用來管理遊戲所有場景的切換,包括創建新的場景,切換下一個場景,和關卡場景
OpenLayer類用來創建第一個場景
CCScene *SnakeSceneManager::createscene()
{
CCScene *Scene = CCScene::create();
//進入遊戲第1個圖層
OpenLayer *openlayer = OpenLayer::create();//工作室logo
Scene->addChild(openlayer);//加入該場景中
return Scene;
}
init()函數創建背景圖片,實現淺入淺出場景效果
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);//遊戲關於按鈕回調
void setgame(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));
//設置按鈕
CCMenuItemImage *image4 = CCMenuItemImage::create("set.png", "set2.png", this, menu_selector(SnakeMenuScene::setgame));
//about 按鈕
CCMenuItemImage *image3 = CCMenuItemImage::create("aboutA.png", "aboutB.png", this, menu_selector(SnakeMenuScene::aboutgame));
CCMenu *menu = CCMenu::create(image1, image2, image3, image4, 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=-100; break;
case 3:
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...");
ssm1->aboutlayer();
}
void SnakeMenuScene::setgame(CCObject* pObject)
{
CCLOG("setgame...");
ssm1->setlayer();
}