系统主菜单如下图所示:

首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景。

下面看下这个界面的源码:

/*** Power by  html5中文网(html5china.com)* author: jackyWHJ*/cc.dumpConfig();
var winSize;
var SysMenu = cc.Layer.extend({_hero:null,_logo:null,_logoFrameCache:null,imagesArrLen:0,bigImgLen:0,init:function () {var bRet = false;if (this._super()) {this._logoFrameCache = cc.SpriteFrameCache.getInstance();this._logoFrameCache.addSpriteFrames(s_textureBigImage_plist);winSize = cc.Director.getInstance().getWinSize();var sp = cc.Sprite.create(s_b01);sp.setAnchorPoint(cc.p(0,0));//设置锚点左下角this.addChild(sp, 0, 1);//addChild(cocos2d::CCNode *child, int zOrder, int tag);// 其中child参数为将要添加的节点。对于场景而言。添加的节点就是层,先添加的层会被置于后添加的层之下。// 如果想要指定先后次顺,可以使用不同的zOrder,zOrder代表该节点下元素的先后次序,值越大显示越靠上。// 默认值是0.tag是元素的标识号码,如果子节点设置了tag值,就可以在它的父节点中利用tag值找到它var newGameNormal = cc.Sprite.create(s_menu, cc.rect(0, 0, 126, 33));var newGameSelected = cc.Sprite.create(s_menu, cc.rect(0, 33, 126, 33));var newGameDisabled = cc.Sprite.create(s_menu, cc.rect(0, 33 * 2, 126, 33));var gameSettingsNormal = cc.Sprite.create(s_menu, cc.rect(126, 0, 126, 33));var gameSettingsSelected = cc.Sprite.create(s_menu, cc.rect(126, 33, 126, 33));var gameSettingsDisabled = cc.Sprite.create(s_menu, cc.rect(126, 33 * 2, 126, 33));var aboutNormal = cc.Sprite.create(s_menu, cc.rect(252, 0, 126, 33));var aboutSelected = cc.Sprite.create(s_menu, cc.rect(252, 33, 126, 33));var aboutDisabled = cc.Sprite.create(s_menu, cc.rect(252, 33 * 2, 126, 33));var newGame = cc.MenuItemSprite.create(newGameNormal, newGameSelected, newGameDisabled, function () {this.onButtonEffect();flareEffect(this, this, this.onNewGame);}.bind(this));var gameSettings = cc.MenuItemSprite.create(gameSettingsNormal, gameSettingsSelected, gameSettingsDisabled, this.onSettings, this);var about = cc.MenuItemSprite.create(aboutNormal, aboutSelected, aboutDisabled, this.onAbout, this);//系统菜单var menu = cc.Menu.create(newGame, gameSettings, about);menu.alignItemsVerticallyWithPadding(10);this.addChild(menu, 1, 2);menu.setPosition(winSize.width / 2 , winSize.height / 2 - 80);//logo动画this.bigImgLen = LLK.CONTAINER.BIGIMAGES.length;this._logo = cc.Sprite.createWithSpriteFrameName(LLK.CONTAINER.BIGIMAGES[Math.floor( Math.random()*this.bigImgLen)]);this._logo.setAnchorPoint(cc.p(0, 0));this._logo.setPosition(winSize.width/2 -100, 300);this.addChild(this._logo, 10, 1);var animFrames = []; //      将所有帧存入一个数组for (var i=0;i<this.bigImgLen;i++) {//采用循环添加动画的每一帧var frame =this._logoFrameCache.getSpriteFrame(LLK.CONTAINER.BIGIMAGES[i]);if (frame) {animFrames.push(frame);}}//        创建动画,设置播放间隔var animation = cc.Animation.create(animFrames, 1);// animation.setDelayPerUnit(0.1);//设置动画播放完成是否保持在第一帧,true为保持在第一帧,false为保持在最后一帧//animation.setRestoreOriginalFrame(false);this._logo.runAction(cc.RepeatForever.create(cc.Animate.create(animation)));if (LLK.SOUND) {cc.AudioEngine.getInstance().setMusicVolume(0.7);cc.AudioEngine.getInstance().playMusic(s_mainMainMusic_mp3, true);}//            this.schedule(this.update, 0.05);//schedule(callback_fn, interval, repeat, delay)// 里面四个参数对应的含义是:// callback_fn:调用的方法名// interval:间隔多久再进行调用 单位是秒// repeat:重复的次数// delay:延迟多久再进行调用bRet = true;}return bRet;},onNewGame:function (pSender) {//load resourcescc.Loader.preload(g_maingame, function () {var scene = cc.Scene.create();scene.addChild(GameLayer.create());scene.addChild(GameControlMenu.create());cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.2, scene));}, this);},onSettings:function (pSender) {this.onButtonEffect();var scene = cc.Scene.create();scene.addChild(SettingsLayer.create());cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.0, scene));},onAbout:function (pSender) {this.onButtonEffect();var scene = cc.Scene.create();scene.addChild(AboutLayer.create());cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.0, scene));},onButtonEffect:function(){if (LLK.SOUND) {var s = cc.AudioEngine.getInstance().playEffect(s_buttonEffect_mp3);}}
});SysMenu.create = function () {var sg = new SysMenu();if (sg && sg.init()) {return sg;}return null;
};SysMenu.scene = function () {var scene = cc.Scene.create();var layer = SysMenu.create();scene.addChild(layer);return scene;
};

首先,在初始化方法里,我们把页面需要的元素添加进去。在这里,我们是先加载了页面动画logo所需要的纹理集:
 this._logoFrameCache = cc.SpriteFrameCache.getInstance();this._logoFrameCache.addSpriteFrames(s_textureBigImage_plist);

再次是添加背景图片,使用cc.Sprite.create(s_b01);来创建背景的sprite,然后设置锚点并把它添加到Layer:

var sp = cc.Sprite.create(s_b01);
sp.setAnchorPoint(cc.p(0,0));//设置锚点左下角
this.addChild(sp, 0, 1);//addChild(cocos2d::CCNode *child, int zOrder, int tag);// 其中child参数为将要添加的节点。对于场景而言。添加的节点就是层,先添加的层会被置于后添加的层之下。// 如果想要指定先后次顺,可以使用不同的zOrder,zOrder代表该节点下元素的先后次序,值越大显示越靠上。// 默认值是0.tag是元素的标识号码,如果子节点设置了tag值,就可以在它的父节点中利用tag值找到它

接着是添加菜单按钮组,使用cc.MenuItemSprite.create创建各个菜单,这里需要添加他们各自的监听方法,

//newGame菜单var newGame = cc.MenuItemSprite.create(newGameNormal, newGameSelected, newGameDisabled, function () {this.onButtonEffect();flareEffect(this, this, this.onNewGame);}.bind(this));

使用cc.Menu.create创建菜单组把它们添加进去,之后添加到Layer,设置布局位置。

 //系统菜单
var menu = cc.Menu.create(newGame, gameSettings, about);
menu.alignItemsVerticallyWithPadding(10);
this.addChild(menu, 1, 2);
menu.setPosition(winSize.width / 2 , winSize.height / 2 - 80);

最后一个点就是logo动画了,先创建logo,把它添加到Layer,之后创建动画,并让logo执行动画。

//logo动画this.bigImgLen = LLK.CONTAINER.BIGIMAGES.length;
this._logo = cc.Sprite.createWithSpriteFrameName(LLK.CONTAINER.BIGIMAGES[Math.floor( Math.random()*this.bigImgLen)]);
this._logo.setAnchorPoint(cc.p(0, 0));
this._logo.setPosition(winSize.width/2 -100, 300);
this.addChild(this._logo, 10, 1);
var animFrames = []; //      将所有帧存入一个数组
for (var i=0;i<this.bigImgLen;i++) {//采用循环添加动画的每一帧var frame =this._logoFrameCache.getSpriteFrame(LLK.CONTAINER.BIGIMAGES[i]);if (frame) {animFrames.push(frame);}
}
//        创建动画,设置播放间隔
var animation = cc.Animation.create(animFrames, 1);
// animation.setDelayPerUnit(0.1);
//设置动画播放完成是否保持在第一帧,true为保持在第一帧,false为保持在最后一帧
//animation.setRestoreOriginalFrame(false);this._logo.runAction(cc.RepeatForever.create(cc.Animate.create(animation)));

下面是几个主要功能的教程

用cocos2d-html5做的消除类游戏《英雄爱消除》——概述

用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现

用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面

用cocos2d-html5做的消除类游戏《英雄爱消除》(4)——游戏结束

ps:概述中有完整源码链接

转载于:https://www.cnblogs.com/jackyWHJ/p/3777803.html

用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单相关推荐

  1. CCF201512-2 消除类游戏(100分)

    试题编号: 201512-2 试题名称: 消除类游戏 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进 ...

  2. csp试题2:消除类游戏

    csp试题2:消除类游戏 题目 分析 代码 总结 题目 问题描述       消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋 ...

  3. C语言-数组-消除类游戏

    做题时借鉴了'Pss9526'的思路,个人认为比我自己原先写的更加易于理解,于此传送 题目:消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每 ...

  4. csp 201512-2 消除类游戏

    题目 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子 ...

  5. (JAVA) 消除类游戏-201512-2

    问题描述 试题编号: 201512-2 试题名称: 消除类游戏 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进 ...

  6. ccf题库中2015年12月2号消除类游戏

    题目如下: 问题描述消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些 ...

  7. 消除类游戏ccf c语言,ccf试题 消除类游戏

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  8. CCF 201512-2 消除类游戏

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  9. CCF201512-2 消除类游戏

    问题描述: 试题编号: 201512-2 试题名称: 消除类游戏 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的 ...

最新文章

  1. flood fill算法
  2. Altium designer—STM32F103ZET6最小系统PCB图
  3. 木马藏身于系统进程中
  4. 数据的属性及“数据的特征”
  5. 给 TComboBox 添加图标 - 回复 heyongan 的问题
  6. 多表关联查询过滤条件写在on与where后的区别
  7. Mysql间隔取数据,实现sqlserver的row_number()函数
  8. git branch看不到分支_Git简介及基本用法
  9. 深度学习进行语音识别的方法 如何建立自己的语音识别系统
  10. 七年师大,青春永不毕业
  11. FTRL在线学习算法的前世今生-从SGD到TG再到FOBOS与RDA
  12. 加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)
  13. 如何下载静海区卫星地图高清版大图
  14. php 开发微信app支付接口
  15. 机器学习与控制:ADMM的ODE模型与基于Lyapunov的收敛分析
  16. Android关于微博发表微博时@好友后删除@的好友的功能实现
  17. Android studio 中文语言包安装
  18. 利器 | REST Assured 实践(二):断言实现
  19. Smoke Screener or Straight Shooter: Detecting Elite Sybil Attacks in User-Review Social Networks阅读笔记
  20. 半导体的PN结及其基本特性

热门文章

  1. IIS 部署asp.net Provisional headers are shown 在VS2005返回值,部署不返回值
  2. 2018年10个最佳项目管理工具及链接
  3. python函数不同类型参数顺序
  4. hdu 6301 Distinct Values(贪心)题解
  5. android baidupush
  6. 微信朋友圈也可以发语音你们造吗?
  7. 条件概率的几何解释 由定义计算条件概率 由条件概率公式计算条件概率
  8. [笔记]java-package
  9. RIP实验总结之一被动接口和单播更新
  10. leetcode852. 山脉数组的峰顶索引(二分法)