编写小游戏《贪头蛇》第一篇

来源:互联网 发布:linux进程调度命令 编辑:程序博客网 时间:2024/05/16 17:21

小游戏《贪头蛇》设计场景有: 主菜单、游戏主场景、游戏继续、游戏设置、游戏暂停、关于

游戏中的UI都是"东拼西凑'过来,其目的通过编写小游戏,体验游戏所需要的基本功能、动画、粒子效果

源码下载地址:http://download.csdn.net/detail/oyangyufu/7505487

进入游戏第一场景,显示该款游戏由哪家工作室或个人开发的


代码:

SnakeSceneManager类用来管理游戏所有场景的切换,包括创建新的场景,切换下一个场景,和关卡场景

OpenLayer类用来创建第一个场景

CCScene *SnakeSceneManager::createscene(){CCScene *Scene = CCScene::create();//进入游戏第1个图层OpenLayer *openlayer = OpenLayer::create();//工作室logoScene->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();}






0 0
原创粉丝点击