系统主菜单如下图所示:

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

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

  1. /**
  2. * Power by html5中文网(html5china.com)
  3. * author: jackyWHJ
  4. */
  5.  
  6. cc.dumpConfig();
  7. var winSize;
  8. var SysMenu = cc.Layer.extend({
  9. _hero:null,
  10. _logo:null,
  11. _logoFrameCache:null,
  12. imagesArrLen:0,
  13. bigImgLen:0,
  14. init:function () {
  15. var bRet = false;
  16. if (this._super()) {
  17. this._logoFrameCache = cc.SpriteFrameCache.getInstance();
  18. this._logoFrameCache.addSpriteFrames(s_textureBigImage_plist);
  19.  
  20. winSize = cc.Director.getInstance().getWinSize();
  21. var sp = cc.Sprite.create(s_b01);
  22. sp.setAnchorPoint(cc.p(0,0));//设置锚点左下角
  23. this.addChild(sp, 0, 1);//addChild(cocos2d::CCNode *child, int zOrder, int tag);
  24. // 其中child参数为将要添加的节点。对于场景而言。添加的节点就是层,先添加的层会被置于后添加的层之下。
  25. // 如果想要指定先后次顺,可以使用不同的zOrder,zOrder代表该节点下元素的先后次序,值越大显示越靠上。
  26. // 默认值是0.tag是元素的标识号码,如果子节点设置了tag值,就可以在它的父节点中利用tag值找到它
  27.  
  28. var newGameNormal = cc.Sprite.create(s_menu, cc.rect(0, 0, 126, 33));
  29. var newGameSelected = cc.Sprite.create(s_menu, cc.rect(0, 33, 126, 33));
  30. var newGameDisabled = cc.Sprite.create(s_menu, cc.rect(0, 33 * 2, 126, 33));
  31.  
  32. var gameSettingsNormal = cc.Sprite.create(s_menu, cc.rect(126, 0, 126, 33));
  33. var gameSettingsSelected = cc.Sprite.create(s_menu, cc.rect(126, 33, 126, 33));
  34. var gameSettingsDisabled = cc.Sprite.create(s_menu, cc.rect(126, 33 * 2, 126, 33));
  35.  
  36. var aboutNormal = cc.Sprite.create(s_menu, cc.rect(252, 0, 126, 33));
  37. var aboutSelected = cc.Sprite.create(s_menu, cc.rect(252, 33, 126, 33));
  38. var aboutDisabled = cc.Sprite.create(s_menu, cc.rect(252, 33 * 2, 126, 33));
  39.  
  40. var newGame = cc.MenuItemSprite.create(newGameNormal, newGameSelected, newGameDisabled, function () {
  41. this.onButtonEffect();
  42. flareEffect(this, this, this.onNewGame);
  43. }.bind(this));
  44.  
  45. var gameSettings = cc.MenuItemSprite.create(gameSettingsNormal, gameSettingsSelected, gameSettingsDisabled, this.onSettings, this);
  46. var about = cc.MenuItemSprite.create(aboutNormal, aboutSelected, aboutDisabled, this.onAbout, this);
  47.  
  48. //系统菜单
  49. var menu = cc.Menu.create(newGame, gameSettings, about);
  50. menu.alignItemsVerticallyWithPadding(10);
  51. this.addChild(menu, 1, 2);
  52. menu.setPosition(winSize.width / 2 , winSize.height / 2 - 80);
  53.  
  54. //logo动画
  55. this.bigImgLen = LLK.CONTAINER.BIGIMAGES.length;
  56. this._logo = cc.Sprite.createWithSpriteFrameName(LLK.CONTAINER.BIGIMAGES[Math.floor( Math.random()*this.bigImgLen)]);
  57. this._logo.setAnchorPoint(cc.p(0, 0));
  58. this._logo.setPosition(winSize.width/2 -100, 300);
  59. this.addChild(this._logo, 10, 1);
  60.  
  61. var animFrames = []; // 将所有帧存入一个数组
  62. for (var i=0;i<this.bigImgLen;i++) {
  63. //采用循环添加动画的每一帧
  64. var frame =this._logoFrameCache.getSpriteFrame(LLK.CONTAINER.BIGIMAGES[i]);
  65. if (frame) {
  66. animFrames.push(frame);
  67. }
  68. }
  69. // 创建动画,设置播放间隔
  70. var animation = cc.Animation.create(animFrames, 1);
  71. // animation.setDelayPerUnit(0.1);
  72. //设置动画播放完成是否保持在第一帧,true为保持在第一帧,false为保持在最后一帧
  73. //animation.setRestoreOriginalFrame(false);
  74. this._logo.runAction(cc.RepeatForever.create(cc.Animate.create(animation)));
  75. if (LLK.SOUND) {
  76. cc.AudioEngine.getInstance().setMusicVolume(0.7);
  77. cc.AudioEngine.getInstance().playMusic(s_mainMainMusic_mp3, true);
  78. }
  79.  
  80. // this.schedule(this.update, 0.05);//schedule(callback_fn, interval, repeat, delay)
  81. // 里面四个参数对应的含义是:
  82. // callback_fn:调用的方法名
  83. // interval:间隔多久再进行调用 单位是秒
  84. // repeat:重复的次数
  85. // delay:延迟多久再进行调用
  86. bRet = true;
  87. }
  88. return bRet;
  89. },
  90.  
  91. onNewGame:function (pSender) {
  92. //load resources
  93. cc.Loader.preload(g_maingame, function () {
  94. var scene = cc.Scene.create();
  95. scene.addChild(GameLayer.create());
  96. scene.addChild(GameControlMenu.create());
  97. cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.2, scene));
  98. }, this);
  99. },
  100.  
  101. onSettings:function (pSender) {
  102. this.onButtonEffect();
  103. var scene = cc.Scene.create();
  104. scene.addChild(SettingsLayer.create());
  105. cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.0, scene));
  106. },
  107.  
  108. onAbout:function (pSender) {
  109. this.onButtonEffect();
  110. var scene = cc.Scene.create();
  111. scene.addChild(AboutLayer.create());
  112. cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.0, scene));
  113. },
  114.  
  115. onButtonEffect:function(){
  116. if (LLK.SOUND) {
  117. var s = cc.AudioEngine.getInstance().playEffect(s_buttonEffect_mp3);
  118. }
  119. }
  120. });
  121.  
  122. SysMenu.create = function () {
  123. var sg = new SysMenu();
  124. if (sg && sg.init()) {
  125. return sg;
  126. }
  127. return null;
  128. };
  129.  
  130. SysMenu.scene = function () {
  131. var scene = cc.Scene.create();
  132. var layer = SysMenu.create();
  133. scene.addChild(layer);
  134. return scene;
  135. };
首先,在初始化方法里,我们把页面需要的元素添加进去。在这里,我们是先加载了页面动画logo所需要的纹理集:
  1. this._logoFrameCache = cc.SpriteFrameCache.getInstance();
  2. this._logoFrameCache.addSpriteFrames(s_textureBigImage_plist);

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

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

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

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

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

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

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

  1. //logo动画
    this.bigImgLen = LLK.CONTAINER.BIGIMAGES.length;
  2. this._logo = cc.Sprite.createWithSpriteFrameName(LLK.CONTAINER.BIGIMAGES[Math.floor( Math.random()*this.bigImgLen)]);
  3. this._logo.setAnchorPoint(cc.p(0, 0));
  4. this._logo.setPosition(winSize.width/2 -100, 300);
  5. this.addChild(this._logo, 10, 1);
  6. var animFrames = []; // 将所有帧存入一个数组
  7. for (var i=0;i<this.bigImgLen;i++) {
  8. //采用循环添加动画的每一帧
  9.   var frame =this._logoFrameCache.getSpriteFrame(LLK.CONTAINER.BIGIMAGES[i]);
  10.   if (frame) {
  11.      animFrames.push(frame);
  12.   }
  13. }
  14. // 创建动画,设置播放间隔
  15. var animation = cc.Animation.create(animFrames, 1);
  16. // animation.setDelayPerUnit(0.1);
  17. //设置动画播放完成是否保持在第一帧,true为保持在第一帧,false为保持在最后一帧
  18. //animation.setRestoreOriginalFrame(false);
  19. 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:概述中有完整源码链接

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

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

    游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...

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

    Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...

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

    在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...

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

    游戏结束界面: 在前面几个教程中,这个界面的创作所需要的知识点基本我们都讲过了,这里就说下用户数据的缓存吧,也是先来看下源码 /** * Power by html5中文网(html5china.co ...

  5. 消除类游戏(js版)

    最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...

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

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

  7. CCF2015122消除类游戏(C语言版)

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

  8. ccf消除类游戏

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

  9. CCF CSP 201512-2 消除类游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...

随机推荐

  1. spring mvc controller中的异常封装

    http://abc08010051.iteye.com/blog/2031992 一直以来都在用spring mvc做mvc框架,我使用的不是基于注解的,还是使用的基于xml的,在controlle ...

  2. Bestcoders

    Senior's Fish Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  3. 程序员不修复BUG怎么办

    在测试过程中,难免遇到开发人员因为一些原因不想修改个别bug的情况.遇到这种问题时,该如何去推进开发修改bug呢? 一.现状分析 1.开发人员为啥不愿意修复BUG? (1)开发与测试对bug的定义理解 ...

  4. struct和class的不同以及struct的应用场景

    struct在C#中被用来定义结构,它是一种比类小的数据类型.和类一样都是创建对象的模板,可以有自己的数据以及处理和访问数据的方法. struct的用法: struct FurnitureSize { ...

  5. android性能优化学习笔记(加快应用程序启动速度:)

    一:安卓中应用程序的启动方式有两种: 冷启动:后台没有该应用进程,系统会重新创建一个进程分配给该应用(所以会先创建和初始化Application类,再创建和初始化MainActivity,包括测量,布 ...

  6. 远程桌面工具 TeamViewer

    在家里想远程公司的电脑 教程: http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html 下载地址: http://rj.baidu ...

  7. 安装MacOS到虚拟机

    [TOC] 系统版本历史 4. 升级系统到10.12.6版本 时间:2017年9月21日 15:58:55 大小:VMDK(7.63 GB) 变动: 升级系统到10.12.6版本 3. 降低内存到6G ...

  8. poj3411--Paid Roads(bfs+状压)

    题目链接:id=3411">点击打开链接 题目大意:有n个点.m条有向边,经过边须要一个花费,a b c p q代表 a到b的一条道路,假设经过这条边之前经过c点,那么须要p的花费,否 ...

  9. quartz项目中的运用

    下面是之前项目中quartz的运用,我将它梳理出来. 测试类: public class OrdExpireTaskMain { public static void main(String[] ar ...

  10. LeetCode78:Subsets

    Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...