cocos3.x 扫雷03 游戏主场景布局设计

扫雷03 游戏主场景布局设计

游戏主场景的布局如图

游戏场景类的设计

游戏主场景类GameScene继承自Layer类,这是cocos2.2.3时代的习惯,现在其实不需要这样做了。继承自Layer是为了添加触摸事件的方便,现在3.x版本没有必要这样了。

 1: class GameScene : public cocos2d::Layer
 2: {
 3: public:
 4:
 5:     virtual bool init();
 6:
 7:     //创建scene的时候选关,1==》9*9,2==》16*16,3==》24*24
 8:     static cocos2d::CCScene* scene(int customs = 1);
 9:     //创建的时候就要确定
 10:     static GameScene* create(int customs = 1);
 11:
 12: protected:
 13:     bool LoadResource();    //加载资源
 14:     bool addBackGround();    //设置背景
 15: private:
 16:     int        _mine;            //地雷数
 17:     int        _customs;    //关数
 18:     int        _MaxRanks;        //最大可用土地行列
 19:     Sprite * _bgland;        //雷区背景精灵
 20:     Sprite * _bgmenu;        //菜单项背景精灵
 21: };

create函数与scene函数的实现

create函数创建了一个类实例,并对其的一些自有的成员(非继承Layer的)进行了赋值。

1: GameScene* GameScene::create(int customs)
 3:     GameScene *s = new GameScene();
 4:     if (s != NULL) {
 5:         if (customs<0 || customs >3) {
 6:             CCLog("customs value error");
 7:             return NULL;
 8:         }
 9:         s->_customs = customs;
 10:         s->_count = 0;        //记录当前扫了多少块区域
 11:         s->_toFlag = false;        //是不是去标记雷块
 12:         s->init();
 13:         s->autorelease();    //此处需要,在addChile的时候自然会被retain
 14:     }
 15:     else {
 16:         CC_SAFE_DELETE(s);    //安全删除
 17:         //#define CC_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0)
 18:         //等价于===> do{ //使用do while是为了适应我们习惯性了加上分号,没有分号会提示错误
 19:         // if(s!=NULL) {
 20:         // delete s;
 21:         // s=NULL;
 22:         // }
 23:         // }while(0)
 24:     }
 25:     return s;
 26: }
 27:
 28:
 29: CCScene* GameScene::scene(int customs)
 30: {
 31:     CCScene *scene = CCScene::create();
 32:
 33:     GameScene *layer = GameScene::create(customs);
 34:
 35:     scene->addChild(layer);
 36:
 37:     return scene;
 38: }
LoadResource() 加载资源文件函数实现

加载资源本来不应该在此处,因为还没有设计游戏起始选关界面,所以在此处做了。游戏需要加载的资源也不多,就几张小图片。音效素材没有,什么时候找到了随时可以添加。

1: /////////////////////////////////////////////////////////////////////////
 2: // 初始化加载资源
 3: bool GameScene::LoadResource()
 4: {
 5:     const char* ImgFile[] = {
 6:         "0.png",
 7:         "1.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 8:         "2.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 9:         "3.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 10:         "4.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 11:         "5.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 12:         "6.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 13:         "7.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 14:         "8.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 15:         "no.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 16:         "-1.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 17:         "bg_land.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 18:         "bg_menu.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 19:         "boom.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 20:         "flag.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 21:         "blink_1.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 22:         "blink_2.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 23:         "exit.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 24:         "exits.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 25:         "restart.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 26:         "restarts.png"
 27:     };
 28:     for (int i = 0; i < sizeof(ImgFile) / sizeof(char*); ++i) {
 29:         if (NULL == TextureCache::getInstance()->addImage(ImgFile[i])) {
 30:             return false;
 31:         }
 32:     }
 33:     return true;
 34: }

init函数的实现

init函数要做的事情如下面代码的注释,因为这是之前写的,所以本次不一定如此。

大致流程是这样的,被注释掉的说明本次还没有完全做好。现在只要加载背景来显示即可。

 1: bool GameScene::init()
 2: {
 3:     //////////////////////////////
 4:     // 1. super init first
 5:     if (!CCLayer::init()) {
 6:         return false;
 7:     }
 8:     //加载资源
 9:     LoadResource();
 10:     //设置背景
 11:     addBackGround();
 12:     //设置菜单项
 13:     //addMenu();
 14:     //初始化土地,埋雷
 15:     //BuryMine();
 16:
 17:     //初始化雷区精灵
 18:     //InitMine();
 19:
 20:     //设置触摸事件
 21:     //setTouchEnabled(true);
 22:     //setTouchMode(kCCTouchesOneByOne);
 23:     //setTouchPriority(2);
 24:
 25:     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
 26:     CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
 27:
 28:     return true;
 29: }

addBackGround()加载背景函数的实现

这里设计得有点繁琐,是为了少修改之前写的代码。

1: //////////////////////////////////////////////////////////////////////
 2: // 设置背景
 3: bool GameScene::addBackGround()
 5:     //创建一个土地放置层,其是一个CCSprite,因为要显示背景
 6:     Texture2D * texture = TextureCache::getInstance()->textureForKey("bg_land.png");
 7:     if (!texture) {
 8:         return false;
 9:     }
 10:     //设置雷区背景
 11:     Sprite * bgland = Sprite::createWithTexture(texture);
 12:     //设置背景为宽度适应
 13:     bgland->setScale(WinWidth / bgland->getContentSize().width);
 14:     //中央点为锚点
 15:     bgland->setAnchorPoint(ccp(.0f,.0f));
 16:     addChild(bgland);
 17:     bgland->setPosition(ccp(0,WinHeigth - bgland->getBoundingBox().size.height));    //放置在中央
 18:     _bgland = bgland;
 19:
 20:     //设置菜单背景
 21:     texture = TextureCache::getInstance()->textureForKey("bg_menu.png");
 22:     Sprite * bgmenu = Sprite::createWithTexture(texture);
 23:     bgmenu->setScale(WinWidth / bgmenu->getContentSize().width);
 24:     bgmenu->setAnchorPoint(CCPointZero);
 25:     bgmenu->setPosition(CCPointZero);
 26:     addChild(bgmenu);
 28:     //添加了一个半透明的Layer,到时候用来防止雷区的格子块
 29:     //本来是想放置在Sprite上的,算了,还是这个比较实在
 30:     //加载一个半透明的CCLayerColor,来遮住背景
 31:     _layerColor = LayerColor::create(ccc4(128,128,128),monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 32:                                        WinWidth,//设置其大小和雷区背景一致
 33:                                        bgland->getBoundingBox().size.height);
 34:     _layerColor->setPosition(bgland->getPosition());
 35:     addChild(_layerColor);
 36:     //设置触摸优先级 这个没有用,就没有在这里设置触摸事件
 37:     //_layerColor->setTouchPriority(10);
 38:     return true;
 39: }

测试一下加载背景效果

本来应该把菜单项也加进去的,不急这一点。先看看效果,待会再加。

运行前应该把相关的资源拷贝到项目目录下的res文件夹

测试前要先修改下窗口的尺寸和设计尺寸

和之前2.2.3版本的效果不一样,看来还得修改修改

修改后的效果

修改后的addBackGround()函数

6: Texture2D * texture = TextureCache::getInstance()->getTextureForKey("bg_land.png");
 14:     //零点为锚点
 15:     bgland->setAnchorPoint(Vec2::ZERO);
 17:     bgland->setPosition(Vec2(0,WinHeigth - bgland->getBoundingBox().size.height));    //放置在上半屏幕
 19:     bgland = nullptr;
 21:     texture = TextureCache::getInstance()->getTextureForKey("bg_menu.png");
 23:     //设置缩放宽度为适应屏幕宽度
 24:     bgmenu->setScaleX(WinWidth / bgmenu->getContentSize().width);
 25:     //设置高度为适应除去_bgland后剩下的部分
 26:     bgmenu->setScaleY(_bgland->getBoundingBox().getMinY() / bgmenu->getContentSize().height);
 28:     bgmenu->setAnchorPoint(Vec2::ZERO);
 29:     bgmenu->setPosition(Vec2::ZERO);
 30:     addChild(bgmenu);
 31:     _bgmenu = bgmenu;
 32:     bgmenu = nullptr;
 33:     //添加了一个半透明的Layer,到时候用来防止雷区的格子块
 34:     //本来是想放置在Sprite上的,算了,还是这个比较实在
 35:     //加载一个半透明的CCLayerColor,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 36:     _layerColor = LayerColor::create(Color4B(128,64),monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 37:                                        WinWidth,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 38:                                        _bgland->getBoundingBox().size.height);
 39:     _layerColor->setPosition(_bgland->getPosition());
 40:     addChild(_layerColor);
 41:     //设置触摸优先级 这个没有用,就没有在这里设置触摸事件
 42:     //_layerColor->setTouchPriority(10);
 43:     return true;
 44: }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是