主菜单场景,主要实现进入游戏时的初始界面,它包括6个场景入口的菜单项:开始游戏,排行榜,帮助,设置,关于,退出

下面是MainLayer的头文件

#ifndef  __MAIN_LAYER_H_
#define __MAIN_LAYER_H_

#include "cocos2d.h"
#include "GameSceneManager.h"

using namespace cocos2d;

class MainLayer :public Layer//主界面主要包含6个菜单项
{
public:
	virtual bool init();
	int randNum();//产生随机数的方法
	void initSound();//加载游戏音效的方法
	void menuCallBack0(Ref* pSender);//切换到选择游戏场景
	void menuCallBack1(Ref* pSender);//切换到排行榜场景
	void menuCallBack2(Ref* pSender);//切换到游戏设置场景
	void menuCallBack3(Ref* pSender);//切换到游戏帮助场景
	void menuCallBack4(Ref* pSender);//切换到游戏关于场景
	void menuCallBack5(Ref* pSender);//退出游戏的菜单回调方法
	void initTitle();//更新标题
	CREATE_FUNC(MainLayer);
public:
	Sprite* backGround;
	NodeGrid* effectNode;//网格节点,用来实现3D水波涟漪特效
	static bool musicFlag;
	static bool soundFlag;
	GameSceneManager* sceneManager;
};
#endif


MainLayer.cpp文件,其中文件中的某些菜单项,暂时没有实现其功能,后续补充修改。


#include "MainLayer.h"
#include "SimpleAudioEngine.h"

bool MainLayer::musicFlag = true;
bool MainLayer::soundFlag = true;

bool MainLayer::init()//主菜单界面的初始化
{
	if (!Layer::init())
		return false;

	//设置随机种子,该方法基本可以实现真正的随机
	timeval psv;
	gettimeofday(&psv,nullptr);
	unsigned long int seed = psv.tv_sec * 1000 + psv.tv_usec / 1000;
	srand(seed);

	auto visibleSize = Director::getInstance()->getVisibleSize();
	auto origin = Director::getInstance()->getVisibleOrigin();
	int n = randNum();//获取随机数(0-4),产生随机背景
	if (n % 2 == 0)
		backGround = Sprite::create("pic/morning.png");
	else
		backGround = Sprite::create("pic/night.png");
	backGround->setAnchorPoint(Vec2(0,0));//设置背景锚点在左下角
	backGround->setPosition(origin.x,origin.y + visibleSize.height - backGround->getContentSize().height);
	this->addChild(backGround,0);

	if (MainLayer::musicFlag)
		CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("sounds/playscene.mp3",true);
	
	auto floor = Sprite::create("pic/floor.png");
	floor->setAnchorPoint(Vec2(0,0));
	floor->setPosition(origin);
	this->addChild(floor);
	floor->runAction(RepeatForever::create(Sequence::create(Moveto::create(0.5f,Vec2(-120,0)),Moveto::create(0,Vec2(0,nullptr)));

	//菜单项加载
	auto menuItemStart = MenuItemImage::create("button/start.png","button/start_off.png",CC_CALLBACK_1(MainLayer::menuCallBack0,this));
	menuItemStart->setPosition(Vec2(150,600));

	auto menuItemRank = MenuItemImage::create("button/rank.png","button/rank_off.png",CC_CALLBACK_1(MainLayer::menuCallBack1,this));
	menuItemRank->setPosition(Vec2(390,600));

	auto menuItemSet = MenuItemImage::create("button/set.png","button/set_off.png",CC_CALLBACK_1(MainLayer::menuCallBack2,this));
	menuItemSet->setPosition(Vec2(150,450));

	auto menuItemHelp = MenuItemImage::create("button/help.png","button/help_off.png",CC_CALLBACK_1(MainLayer::menuCallBack3,this));
	menuItemHelp->setPosition(Vec2(390,450));

	auto menuItemAbout = MenuItemImage::create("button/about.png","button/about_off.png",CC_CALLBACK_1(MainLayer::menuCallBack4,this));
	menuItemAbout->setPosition(Vec2(150,300));

	auto menuItemExit = MenuItemImage::create("button/exit.png","button/exit_off.png",CC_CALLBACK_1(MainLayer::menuCallBack5,this));
	menuItemExit->setPosition(Vec2(390,300));

	auto mn = Menu::create(menuItemStart,menuItemRank,menuItemSet,menuItemHelp,menuItemAbout,menuItemExit,nullptr);
	mn->setPosition(Vec2::ZERO);
	this->addChild(mn,10);

	effectNode = NodeGrid::create();
	this->addChild(effectNode,10);//加入网格节点
	auto title = Sprite::create("pic/title.png");
	title->setPosition(Vec2(270,800));
	effectNode->addChild(title);//将精灵添加到网格节点中
	Director::getInstance()->setDepthTest(false);//关闭深度检测
	effectNode->runAction(RepeatForever::create(Ripple3D::create(2.0f,Size(32,24),Vec2(270,800),360,4,5)));
	return true;
}


int MainLayer::randNum()
{
	int num = random(0,4);//根据产生的数,确定要加载的背景图片
	return num;
}

void MainLayer::initTitle()
{
	auto title = Sprite::create("pic/title.png");
	title->setPosition(270,800);
	this->addChild(title,10);
	this->removeChild(effectNode);
}

void MainLayer::menuCallBack0(Ref* pSender)
{

}

void MainLayer::menuCallBack1(Ref* pSender)
{
	initTitle();
	sceneManager->goToRankBirdScene();
}

void MainLayer::menuCallBack2(Ref* pSender)
{

}

void MainLayer::menuCallBack3(Ref* pSender)
{

}
void MainLayer::menuCallBack4(Ref* pSender)
{

}
void MainLayer::menuCallBack5(Ref* pSender)
{

}


主菜单布景实现的效果图:

cocos2dx休闲游戏--Fruit & Bird 开发学习2--主菜单场景MainLayer的更多相关文章

  1. 详解iOS游戏开发中Cocos2D的坐标位置关系

    这篇文章主要介绍了iOS游戏开发中Cocos2D的坐标位置关系,Cocos2D是专门用来开发iOS游戏的开源框架,文中示例代码采用Objective-C语言,需要的朋友可以参考下

  2. 剖析iOS开发中Cocos2d-x的内存管理相关操作

    这篇文章主要介绍了剖析iOS开发中Cocos2d-x的内存管理相关操作,Cocos2d-x是开发游戏的利器,需要的朋友可以参考下

  3. iOS开发中使用cocos2d添加触摸事件的方法

    这篇文章主要介绍了iOS开发中使用cocos2d添加触摸事件的方法,cocos2d是制作iOS游戏的利器,需要的朋友可以参考下

  4. ios – cocos2d 2.0-rc2:结束导演并重启

    我有一个使用UIKitmenues的cocos2d驱动游戏,所以我只使用一个viewcontroller的框架,这是游戏本身.此外,它只有一个场景.由于cocos2d2.0导演本身是一个UIViewController子类,所以我只需在用户点击一个开始按钮时将其推送到我的MenuViewController中:当用户启动第一个游戏时,第一次调用该方法时,这很好.当游戏结束时,我调用[[CCDire

  5. cocos2d-iphone – CCNode和CCLayer之间的区别?

    Cocos2D中的CCNode和cclayer有什么区别?

  6. cocos2d-iphone – 跟踪cocos2d中的轨迹路径

    如何跟踪cocos2d中球流动的路径例如在愤怒的小鸟游戏视频中鸟儿流动的动作.他们显示路径.同样我想要您可以通过使用NSTimer或CAdisplayLink重复使用物体在其移动路径中的坐标并在该坐标处显示一个小点来实现此目的.计时器将开始,例如在愤怒的小鸟中,当鸟首次发射时,然后当鸟击中某物时停止.>启动鸟>此时每隔1/6的点就会在鸟坐标处绘制一个点>当鸟撞到某物时,计时器停止,因此不再绘制点

  7. Cocos2D OR libgdx for Android游戏开发

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. Cocos2d 2.0将UIView添加到CClayer openglview已弃用

    我有一些麻烦添加一个UIView到cocos2dv2.0,因为openGlView已被弃用,我无法添加视图.我在寻找另外一种方法来做到这一点,但是找不到任何东西.任何人都可以告诉我在所有cc层之前添加一个UIView的新方法?或者我该如何完成这个?使用这个而不是openGLView:

  9. cocos2d-iphone – Cocos2d – 一种获取当前场景的方法?

    我正在寻找一种获取当前场景的方法,以便我可以随时了解哪个场景正在运行.谢谢!

  10. cocos2d-iphone – Cocos2d Box2d或Chipmunk

    只需打开名为“cocos2d-iphone”的Xcode项目,并查看Box2dtest和Chipmunkdemo。Box2d更强大,但是我觉得比Chipmunk更难使用。

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部