【别踩白块】游戏实战开发之主菜单场景
大家好,我是Lampard------是一位从事cocos开发的游戏小白。
本人经验尚缺,如果各位大牛有更好的建议,欢迎在下方评论,谢谢!!!
今天要介绍的是游戏主菜单场景的实现:
(一)移除HelloWorldScene文件,调整屏幕大小
接上一篇博客,当我们打开了所创建的项目之后,在vs左侧的解决方案中,我们可以找到名为src的筛选器,点开发现里面存放着4个文件,分别是HelloWorldScene.h,HelloWorldScene.cpp,AppDelegate.h.AppDelegate.cpp。
AppDelegate很重要,它负责构建openGL这个我们所能看到的界面,以及存放这一些系统的函数。所以我们把它保留下来,而HelloWorldScene那两个文件则是负责创建一个HelloWorld的界面,没有用,所以我们把它删掉。
然后点开AppDelegate文件,找到designResolutionSize,并把它改成你想要的的屏幕大小。
我在这个游戏项目中是选择了320*480,这样我们的屏幕大小就已经调整好了。
(二)新建筛选器添加主菜单场景
为了方便管理,我们可以在解决方案WhiteBlock处点击右键->添加->新建筛选器,并且把筛选器命名为场景类。
这样就方便我们以后可以创建的场景添加进去并且进行管理。
紧接着我们就可以右击场景类,新建一个StartLayer.h以及StartLayer.cpp进去了
(三)主菜单场景的实现
(1).h文件
首先我们需要定义一个类:StartLayer,这个类是用来展现我们这个主菜单画面的。
然后在类里面定义三个方法,分别的作用为:创建一个空的场景,填充这个场景,以及静态创建这个类。
#ifndef __StartLayer__H__
#define __StartLayer__H__
#include "cocos2d.h" // cocos2d的头文件
#include "extensions/cocos-ext.h"
USING_NS_CC; // 使用cocos2d的命名空间
USING_NS_CC_EXT;
class StartLayer : public Layer {
public:
static Scene* createScene(); // 创建一个场景
virtual bool init(); // 填充这个场景
CREATE_FUNC(StartLayer); // 静态创建一个StartLayer类并把它放进自动回收池
private:
Size vsable = Size(320, 480); // 屏幕大小
};
#endif
(2).cpp文件
.cpp就是负责来实现头文件中所写的功能,首先是创建一个空的场景,然后在上面填充一个StartLayer菜单层:
#include "StartLayer.h"
#include "extensions/cocos-ext.h"
#include "GameLayer.h"
USING_NS_CC;
USING_NS_CC_EXT;
Scene* StartLayer::createScene()
{
Scene* scene = Scene::create(); // 定义一个场景
StartLayer* startLayer = StartLayer::create(); // 创建一个菜单层
scene->addChild(startLayer); // 把菜单层加进场景中
return scene;
}
然后就是把我们所创建的层进行填充:
项目文件夹下有一个resource文件夹,里面就是用来存放我们这个游戏项目的资源图片和音乐
(1)我们把放在里面的一张图片“StartLayerBg”设置为场景的背景精灵
(2)建立一个菜单按钮,并把两张命名为“start”,“start1”的图片作为菜单项按钮被点击前和点击时的效果图
(3)最后就是调整菜单按钮的位置并把背景精灵和菜单按钮放进这个StartLayer层中了
bool StartLayer::init()
{
if (!Layer::init())
{
return false;
}
auto bgSprite = Sprite::create("StartLayerBg.jpg"); // 设置背景图
bgSprite->setPosition(vsable.width / 2, vsable.height / 2); // 背景图的位置
this->addChild(bgSprite); // 把背景图加载进我们的层中
auto StartItem = MenuItemSprite::create( // 一个切换场景的菜单项
Sprite::create("Start.png"), // 被点击前的图片
Sprite::create("Start1.png"), // 被点击后的图片
[&](Ref * ref) { // 回调函数,用来切换到游戏
// 场景
// Director::getInstance()->replaceScene(GameLayer::createScene());
}
);
// 开始按钮
StartItem->setPosition(160, 60); // 放置菜单项位置
auto menu = Menu::create(StartItem, NULL); // 把菜单项加载进菜单
menu->setPosition(Point::ZERO); // 放置菜单位置
this->addChild(menu); // 把菜单加进层中
return true;
}
至此我们的主菜单场景已经实现,我们看看效果吧: