用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单
系统主菜单如下图所示:
首先,介绍下这个主菜单,它包含了一个动画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 resources
- cc.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;
- };
- 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:概述中有完整源码链接
用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单的更多相关文章
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面
游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现
Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述
在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(4)——游戏结束
游戏结束界面: 在前面几个教程中,这个界面的创作所需要的知识点基本我们都讲过了,这里就说下用户数据的缓存吧,也是先来看下源码 /** * Power by html5中文网(html5china.co ...
- 消除类游戏(js版)
最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...
- ccf题库中2015年12月2号消除类游戏
题目如下: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这 ...
- CCF2015122消除类游戏(C语言版)
问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...
- ccf消除类游戏
问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...
- CCF CSP 201512-2 消除类游戏
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...
随机推荐
- spring mvc controller中的异常封装
http://abc08010051.iteye.com/blog/2031992 一直以来都在用spring mvc做mvc框架,我使用的不是基于注解的,还是使用的基于xml的,在controlle ...
- Bestcoders
Senior's Fish Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- 程序员不修复BUG怎么办
在测试过程中,难免遇到开发人员因为一些原因不想修改个别bug的情况.遇到这种问题时,该如何去推进开发修改bug呢? 一.现状分析 1.开发人员为啥不愿意修复BUG? (1)开发与测试对bug的定义理解 ...
- struct和class的不同以及struct的应用场景
struct在C#中被用来定义结构,它是一种比类小的数据类型.和类一样都是创建对象的模板,可以有自己的数据以及处理和访问数据的方法. struct的用法: struct FurnitureSize { ...
- android性能优化学习笔记(加快应用程序启动速度:)
一:安卓中应用程序的启动方式有两种: 冷启动:后台没有该应用进程,系统会重新创建一个进程分配给该应用(所以会先创建和初始化Application类,再创建和初始化MainActivity,包括测量,布 ...
- 远程桌面工具 TeamViewer
在家里想远程公司的电脑 教程: http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html 下载地址: http://rj.baidu ...
- 安装MacOS到虚拟机
[TOC] 系统版本历史 4. 升级系统到10.12.6版本 时间:2017年9月21日 15:58:55 大小:VMDK(7.63 GB) 变动: 升级系统到10.12.6版本 3. 降低内存到6G ...
- poj3411--Paid Roads(bfs+状压)
题目链接:id=3411">点击打开链接 题目大意:有n个点.m条有向边,经过边须要一个花费,a b c p q代表 a到b的一条道路,假设经过这条边之前经过c点,那么须要p的花费,否 ...
- quartz项目中的运用
下面是之前项目中quartz的运用,我将它梳理出来. 测试类: public class OrdExpireTaskMain { public static void main(String[] ar ...
- LeetCode78:Subsets
Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...