喵星战争(九):游戏主菜单的实现

       一个游戏,主菜单是一个必不可少的。游戏的界面制作相对于主游戏的制作来说要简单的,只需要把界面控件加入布景层中,然后设置按钮的回调函数就可以了。下面我就先附上其实现的主要代码:

在GameMenuScene.cpp中

bool GameMenu::init()
{
	if (!CCLayer::init())
	{
		return false;
	}
	CCSize size = CCDirector::sharedDirector()->getWinSize();

	//初始化背景
	CCSprite* bg = CCSprite::create("bg.png");
	bg->setScale(0.5);
	bg->setPosition(ccp(size.width/2 , size.height/2));
	this->addChild(bg ,0, 0);

	//初始化背景星球
	CCSprite *bgstar = CCSprite::create("moon.png");
	bgstar->setAnchorPoint(ccp(0.5 , 0));
	bgstar->setScale(0.5);
	bgstar->setPosition(ccp(size.width/3*2 ,0));
	this->addChild(bgstar ,1 ,1);

	//初始化标题
	CCNode *title = CCNode::create();
	title->setContentSize(CCSizeMake(size.width -40 , 50));
	CCSprite *ptmLabel = CCSprite::create("meowstar.png");
	ptmLabel->setScale(0.5);
	ptmLabel->setPosition(ccp(0 ,30));
	title->addChild(ptmLabel);
	CCSprite *ptbLabel = CCSprite::create("battle.png");
	ptbLabel->setScale(0.5);
	ptbLabel->setPosition(ccp(0 , -30));
	title->addChild(ptbLabel);
	title->setPosition(ccp(size.width/2 , size.height - 80));
	this->addChild(title ,2 ,2);

	//初始化按钮
	CCMenuItemImage *newGameItem = CCMenuItemImage::create("newGameA.png","newGameB.png", this, menu_selector(GameMenu::menuNewGameCallback));
	newGameItem->setScale(0.5);
	newGameItem->setPosition(ccp(size.width/2 ,size.height/2 -20));
	newGameItem->setEnabled(false);
	CCMenuItemImage *continueItem = CCMenuItemImage::create("continueA.png", "continueB.png", this,menu_selector(GameMenu::menuContinueCallback));
	continueItem->setScale(0.5);
	continueItem->setPosition(ccp(size.width/2 ,size.height/2 -80));
	continueItem->setEnabled(false);
	CCMenuItemImage *aboutItem = CCMenuItemImage::create("aboutA.png", "aboutB.png", this, menu_selector(GameMenu::menuAboutCallback));
	aboutItem->setScale(0.5);
	aboutItem->setPosition(ccp(size.width/2 ,size.height/2 - 140));
	aboutItem->setEnabled(false);
	soundItem = CCMenuItemImage::create("sound-on-A.png", "sound-on-B.png", this,menu_selector(GameMenu::menuSoundCallback));
	soundItem->setScale(0.5);
	soundItem->setEnabled(false);
	soundItem->setPosition(ccp(40 ,40));

	//使用按钮创建菜单
	CCMenu* mainmenu = CCMenu::create(newGameItem, continueItem, aboutItem, soundItem, NULL);
	mainmenu->setPosition(ccp(0, 0));
	this->addChild(mainmenu, 1, 3);

	//初始化声音部分
	issound = true;		//是否开启声音参数
	SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathForFilename("background.mp3")).c_str());
	SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);
	SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathForFilename("background.mp3")).c_str(),true);
	return true;
}

void GameMenu::onEnter()
{
	CCLayer::onEnter();
	CCSize size = CCDirector::sharedDirector()->getWinSize();
	
	//界面进入时,运行菜单项进入动作
	CCNode *mainmenu = this->getChildByTag(3);
	mainmenu->setPositionX(-200);
	mainmenu->runAction(CCSequence::create(CCEaseElasticIn::create(CCMoveTo::create(0.5, ccp(0, 0))),CCCallFuncN::create(this, callfuncN_selector(GameMenu::menuEnter)),NULL));
	CCNode *title = this->getChildByTag(2);
	title->setPositionY(size.height + 20);
	this->runAction(CCEaseElasticIn::create(CCMoveBy::create(0.5 ,ccp(0, -100))));
	CCNode *bgstar = this->getChildByTag(1);
	bgstar->setPositionX(size.width/3);
	bgstar->runAction(CCMoveBy::create(0.5 ,ccp(size.width/3 ,0)));
}
下面是新的知识点:

1.CCMenuItemImage::create(const char *normalImage, const char *selectedImage, CCObject* target, SEL_MenuHandler selector)

上次只是简单的介绍了下CCMenuItemImage的作用,现在介绍下其create函数的具体用法:

normallmage :是指正常状态下的图片;

selectedImage:是指按下时显示的图片;

target: 是指回调函数所在的类;

selector:是指在这个菜单项被按下时的回调函数,该函数设置为这个类的成员函数,返回为void类型。


2.SimpleAudioEngine:其是Cocos2d-x封装的一个用来跨平台的能够简单方便播放背景音乐和音效的音效引擎,其常使用方式如下:

1>准备工作:

引入头文件:#include "SimpleAudioEngine.h";

2>播放背景音乐:

SimpleAudioEngine::sharedEngine()->playBackgroundMusic(const char* pszFilePath, bool bLoop);

3>预先加载背景音乐:

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(const char* pszFilePath);

4>设置播放音量大小:

SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(float volume)//其参数值为0.0-1.0 ;

5>暂停背景音乐:

SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();

还有一些其他播放控制,在这就不一一列举了。


3.CCFileUtils::sharedFileUtils()->fullPathForFilename(const char* pszFileName):

从该函数名就很容易看出该函数是通过文件名来获取相对路径的。

网上对这个CCFileUtils类的介绍比较少,需要详细了解的可以去查看下官方文档的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值