Cocos2d-x 3.2 大富翁游戏项目开发-第三部分 菜单场景

上一部分介绍到片头动画介绍后进入到菜单场景,场景效果如图

MenuScene.h头文件如下:

class MenuScene : public LayerColor
{
public:

    static Scene* createScene();

    virtual bool init();        

    CREATE_FUNC(MenuScene);

private:
	Size visibleSize; //窗口尺寸
	LabelTTF* settingsGameTTF; //场景文字
	void menuTouchDown (Object* pSender,Control::EventType event);// Menu点击回调方法
	void addBackgroundSprite(); //添加场景背景方法
	void addMenuSprites();//添加Menu方法

};

#endif

MenuScene.cpp部分代码如下:

bool MenuScene::init()
{
	if ( !LayerColor::initWithColor(Color4B(255, 255, 255, 255)) )
    {
        return false;
    }
	visibleSize = Director::getInstance()->getVisibleSize();
                Vec2 origin = Director::getInstance()->getVisibleOrigin();

	addBackgroundSprite();//添加场景背景方法

	addMenuSprites(); //添加Menu方法

    return true;
}
void MenuScene::addBackgroundSprite()
{
                 //添加大富翁背景图片,居中显示
	Sprite* menuSpriteLogo= Sprite::create(MENU_LOGO);
	menuSpriteLogo->setPosition(ccp(visibleSize.width/2,visibleSize.height));
	menuSpriteLogo->setAnchorPoint(ccp(0.5,1));
	menuSpriteLogo->setScale(0.6f);
	addChild(menuSpriteLogo);

             //添加左边彩虹图片
	Sprite* rainBowSprite= Sprite::create(RAINBOW);
	rainBowSprite->setPosition(ccp(5,visibleSize.height-20));
	rainBowSprite->setAnchorPoint(ccp(0,1));
	rainBowSprite->setScale(0.3f);
	addChild(rainBowSprite);

               //让彩虹图片左右移动
	MoveBy* rainBowMove = MoveBy::create(1,ccp(8,0));
	MoveBy* rainBowMoveReverse = rainBowMove->reverse();
	Sequence* rainBowAction = Sequence::create(rainBowMove,rainBowMoveReverse,NULL);
	rainBowSprite->runAction(RepeatForever::create(rainBowAction));
}
void MenuScene:: addMenuSprites()
{
              //添加单机游戏Menu
	Scale9Sprite* btnNormal = Scale9Sprite::create(NORMAL_MENU); //设置菜单normal图片
	Scale9Sprite* btnPress = Scale9Sprite::create(PRESS_MENU);// 设置菜单press图片

	LabelTTF* singleGameTTF = LabelTTF::create(SINGLE_GAME ,FONT_MENU,Btn_FontSize);//创建菜单所需的Label对象
	ControlButton* singleGameBtn = ControlButton::create(singleGameTTF,btnNormal);//创建controlButton
	singleGameBtn->setBackgroundSpriteForState(btnPress, Control::State::SELECTED);//添加singleButton菜单的press效果图片

	singleGameBtn->setPosition(ccp(visibleSize.width/2,visibleSize.height-200));//设置位置
	singleGameBtn->setPreferredSize(Size(Btn_Width,Btn_Height));//设置大小
	singleGameBtn->addTargetWithActionForControlEvents(this,cccontrol_selector(MenuScene::menuTouchDown),Control::EventType::TOUCH_DOWN);//设置点击回调方法
	singleGameBtn->setTag(Btn_Single_Game_TAG);//设置Tag
	addChild(singleGameBtn);//添加menu

             //其他menu添加方法,同上类似,不再重复.
	………………………..

               //settings菜单不大一样,该菜单点击都有打开或关闭音效。
	Scale9Sprite* btnNormal3 = Scale9Sprite::create(NORMAL_MENU);
	Scale9Sprite* btnPress3 = Scale9Sprite::create(PRESS_MENU);

	bool music_on = UserDefault::getInstance()->getBoolForKey(MUSIC_ON_KEY,true);//获取音效设置
LabelTTF* settingsGameTTF;
//如果音效开,则menu显示on,如果关,显示off
	if(music_on)
	{
		settingsGameTTF = LabelTTF::create(MUSIC_ON,FONT_MENU,Btn_FontSize);
	}else
	{
                              settingsGameTTF = LabelTTF::create(MUSIC_OFF,FONT_MENU,Btn_FontSize);
	}

	ControlButton* settingsGameBtn = ControlButton::create(settingsGameTTF,btnNormal3);
	settingsGameBtn->setBackgroundSpriteForState(btnPress3, Control::State::SELECTED);

	settingsGameBtn->setPosition(ccp(visibleSize.width/2,visibleSize.height-320));
	settingsGameBtn->setPreferredSize(Size(Btn_Width,Btn_Height));
	settingsGameBtn->addTargetWithActionForControlEvents(this,cccontrol_selector(MenuScene:: menuTouchDown),Control::EventType::TOUCH_DOWN);//添加setting回调
	settingsGameBtn->setTag(Btn_Music_TAG);
	addChild(settingsGameBtn);
                ………………………
}

Menu点击的回调方法,根据点击对象tag调用相应方法,此处主要的是case语句需要添加 { } 括号,否则编译报错

void MenuScene:: menuTouchDown(Object* pSender,Control::EventType event)
{
	log("single touched");
	ControlButton* button = (ControlButton*)pSender;
	int tag = button->getTag();
switch(tag)
	{
		case Btn_Single_Game_TAG:
			{
				log("single game");
				//Director::getInstance()->pushScene(MapChooseScene::createScene());
			}

		case Btn_Multi_Game_TAG:
			{
				log("multi game");
				break;
			}

		case Btn_Music_TAG:
			{
				bool music_on = UserDefault::getInstance()->getBoolForKey(MUSIC_ON_KEY,true);

				if(music_on)
				{
					UserDefault::getInstance()->setBoolForKey(MUSIC_ON_KEY,false);//设置音效关
					button->setTitleForState(MUSIC_OFF,Control::State::NORMAL);//让menu文字显示off
				}else
				{
					UserDefault::getInstance()->setBoolForKey(MUSIC_ON_KEY,true);//设置音效开
					button->setTitleForState(MUSIC_ON,Control::State::NORMAL);// 让menu文字显示on
				}

				break;
			}
		case Btn_Quit_Game_TAG:
			{
				log("quit game");
				//popupLayer();弹出退出对话框,代码较多,后续编写
				break;
			}
	   default:
		   break;
	}

代码比较简单

未完待续...............

时间: 2024-11-03 21:05:20

Cocos2d-x 3.2 大富翁游戏项目开发-第三部分 菜单场景的相关文章

Cocos2d-x 3.2 大富翁游戏项目开发-第三十部分 项目移植

本人只有android设备,没有苹果,无法测试,就不说怎么移植到苹果了.能力有限,请各位见谅 首先调整屏幕适配 修改AppDelegate.cpp文件 //glview->setFrameSize(800, 480);去掉,在真机上不需要,屏幕大小已经有了 修改为ResolutionPolicy::EXACT_FIT :保证了设计区域完全铺满屏幕,但是可能会出现图像拉伸 glview->setDesignResolutionSize(800, 480, ResolutionPolicy::EX

Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色按路径行走

路径获得之后,我们就可以让角色按照路径行走了,当点击go按钮的时候,我们调用player的startGo()方法,传入的参数就是保存了路径的2个一维数组 void GameBaseScene::goButtonCallback(cocos2d::CCObject *pSender) { RouteNavigation::getInstance()->getPath(player1,3,canPassGrid,tiledRowsCount,tiledColsCount); std::vector<

Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这部分代码从网上查阅了一下,基本都是以前版本编写的,需要稍微改动一下即可,效果如图</span> 首先看看在MenuScene.cpp如是如何调用起对话框的 void MenuScene::popupLayer(){ // 定义一个弹出层,传入一张背景图 PopupLayer

Cocos2d-x 3.2 大富翁游戏项目开发-第二十五部分 大富翁股市

当角色走到股市图标时,进入股市界面.每走完一个回合,增加一条股票数据, 股市界面上半部分显示股票信息,包括代码,名称,当前价格,买入价格,涨跌百分比,角色持有的股票数量 下半部分显示股票价格走势,当点击一个股票时,显示相关股票的价格走势,共显示最新14条的价格走势. 每次点击购买,买入100股 .点击卖出,则卖出所持有的该股的所有股票.成交价格 等信息动态更新 点击返回,返回到游戏主界面,并更新角色资金值 1.首先添加股票类 包括代码,名称,买入价格,涨跌百分比,持仓数量等定义以及相关的get

Cocos2d-x 3.2 大富翁游戏项目开发-第二十三部分 购买彩票

当角色路过彩票的标志或者停留位置有彩票标志时,弹出购买彩票的对话框,提示购买彩票,已经买过的号码,不显示.当机器对手路过时则直接购买彩票. 1. 在RicherPlayer.h中增加std::vector<int> lottery_vector;用来存储购买的彩票号码 2. RicherGameController 修改endGo方法,每走完一步就会进入该方法,判断是否有彩票标示图标,有的话发送MSG_LOTTERY彩票消息,MOVEPASS标示走完一步的标志 void RicherGameC

Cocos2d-x 3.2 大富翁游戏项目开发-第十部分实现人物轮流行走

现在只能让我方角色行走,对手并没有行动,如何实现轮流行走呢? 有2种方法,一种是采用刷帧控制器在update进行,另一种采用消息机制的形式实现,我们尽量避免使用刷帧控制器.就采用第二种消息机制吧 我们在GameBaseScene中定义变量players_vector [Player*] 来存放所有的角色: 在添加新对象时,给该对象设置属性_isMyTurn为true 这样所有对象添加完毕后players_vector [Player*]所有的isMyTurn都为true,表示可以调用go方法,进

Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3

点击下载代码   http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法.用来获取角色路径,我们採用单例模式设计该类,先看该类的定义 RouteNavigation.h class RouteNavigation{ public: static RouteNavigation* routeNav_Instance; //该类静态对象 static RouteNavigation*

Cocos2d-x 3.2 大富翁游戏项目开发-第二十九部分 游戏配音

我从大富翁里提取出来里面的wav音效文件,放到我们的游戏中以增加趣味性,仅供学习研究之用 1.修改AppDelegate.cpp文件 // This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stop

Cocos2d-x 3.2 大富翁游戏项目开发-第二十六部分 人物技能

本节主要是添加人物技能,技能包括 暴风骤雨:此技能可以把地块变成空白地块, 随心步:  选择想走的步数,想走几步走几步 巧取豪夺:把对手的土地变成自己的 技能包含的信息:等级 和 耗费体力 等级共5级,每提高一个等级,需要耗费的体力值减10 暴风骤雨:初始耗费体力值70 随心步:  初始耗费体力值50 巧取豪夺:初始耗费体力值100 1.添加技能SkillCard 类,包含了技能基本信息以及如何显示技能 其实现和前面讲解的股票 彩票 card类相似,不再累述 2.修改RicherPlayer类,