Cocos2d-JS中的精灵菜单和图片菜单

精灵菜单的菜单项类是cc.MenuItemSprite,图片菜单的菜单项类是cc.MenuItemImage。由于cc.MenuItemImage继承于cc.MenuItemSprite,所以图片菜单也属于精灵菜单。为什么叫精灵菜单呢?那是因为这些菜单项具有精灵的特点,我们可以让精灵动起来,具体使用时候是把一个精灵放置到菜单中作为菜单项。
精灵菜单项类cc.MenuItemSprite,它的其中一个构造函数定义如下:

ctor(normalSprite,  								//菜单项正常显示时候的精灵
  			selectedSprite,  						//选择菜单项时候的精灵
  			callback,  								//菜单操作的回调函数指针
			target
) 

使用cc.MenuItemSprite比较麻烦,在创建cc.MenuItemSprite之前要先创建三种不同状态所需要的精灵(即normalSprite、selectedSprite和disabledSprite)。cc.MenuItemSprite还有一些其它的构造函数,在这些函数中可以省略disabledSprite参数。
如果精灵是由图片构成的,我们可以使用cc.MenuItemImage实现与精灵菜单同样的效果。cc.MenuItemImage类的其中一个构造函数定义如下:

ctor(normalImage,  							//菜单项正常显示时候的图片
  			selectedImage,  						//选择菜单项时候的图片
			callback, 								//菜单操作的回调函数指针
			target
) 

cc.MenuItemImage还有一些构造函数,在这些函数中可以省略disabledImage参数。
本节我们会通过一个实例介绍一下精灵菜单和图片菜单的使用,这个实例如下图所示。

精灵菜单和图片菜单实例
下面我们看看app.js 中HelloWorldLayer中初始化代码如下: 

var HelloWorldLayer = cc.Layer.extend({

    		ctor:function () {

        this._super();

        var size = cc.director.getWinSize();

        var bg = new cc.Sprite(res.background_png);
        bg.x = size.width/2;
        bg.y = size.height/2;
        this.addChild(bg);        

        // 开始精灵
        var startSpriteNormal = new cc.Sprite(res.start_up_png);						①
        var startSpriteSelected = new cc.Sprite(res.start_down_png);					②
        var startMenuItem = new cc.MenuItemSprite(
        		startSpriteNormal,
        		startSpriteSelected,
        		this.menuItemStartCallback, this); 								③
        startMenuItem.x = 700; 											④
        startMenuItem.y = size.height - 170;         							⑤

        // 设置图片菜单
        var settingMenuItem = new cc.MenuItemImage(
        		res.setting_up_png,
        		res.setting_down_png,
        		this.menuItemSettingCallback, this); 								⑥
        settingMenuItem.x = 480;
        settingMenuItem.y = size.height - 400; 								

        // 帮助图片菜单
        var helpMenuItem = new cc.MenuItemImage(
        		res.help_up_png,
        		res.help_down_png,
        		this.menuItemHelpCallback, this); 								⑦
        helpMenuItem.x = 860;
        helpMenuItem.y = size.height - 480; 									

        var mu = new cc.Menu(startMenuItem, settingMenuItem, helpMenuItem);			⑧
        mu.x = 0;
        mu.y = 0;
        this.addChild(mu);
    },
    menuItemStartCallback:function (sender) {
    	cc.log("menuItemStartCallback!");
    },
    menuItemSettingCallback:function (sender) {
    	cc.log("menuItemSettingCallback!");
    },
    menuItemHelpCallback:function (sender) {
    	cc.log("menuItemHelpCallback!");
    }
});

在上面的代码中第①~②行是创建两种不同状态的精灵,第③行代码是创建精灵菜单项cc.MenuItemSprite对象,第④~⑤行代码是设置开始菜单项(startMenuItem)位置,注意这个坐标是(700, 170),由于(700, 170)的坐标是UI坐标,需要转换为OpenGL坐标,这个转换过程就是startMenuItem.y = size.height - 170。
第⑥和⑦行代码是创建图片菜单项cc.MenuItemImage对象。第⑧行代码是创建cc.Menu对象。
另外,由于背景图片大小是1136 x 640,我们可以在创建工程的时候,创建一个1136 x 640横屏的工程,如果你创建工程不是这个尺寸,我们可以修改根目录下的main.js文件,内容如下:

cc.game.onStart = function(){
    cc.view.setDesignResolutionSize(1136, 640, cc.ResolutionPolicy.EXACT_FIT); 		①
	cc.view.resizeWithBrowserSize(true);
    //load resources
    cc.LoaderScene.preload(g_resources, function () {
        cc.director.runScene(new HelloWorldScene());
    }, this);
};
cc.game.run();

我们需要在第①行中修改屏幕大小代码。

更多内容请关注最新Cocos图书《Cocos2d-x实战:JS卷——Cocos2d-JS开发》
本书交流讨论网站:http://www.cocoagame.net

欢迎加入Cocos2d-x技术讨论群:257760386

更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com

智捷课堂现推出Cocos会员,敬请关注:http://v.51work6.com/courseInfoRedirect.do?action=netDetialInfo&courseId=844465&categoryId=0

《Cocos2d-x实战 JS卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11659698.html

欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息

时间: 2025-01-21 13:04:13

Cocos2d-JS中的精灵菜单和图片菜单的相关文章

实例介绍Cocos2d-x精灵菜单和图片菜单

精灵菜单类是MenuItemSprite图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢那是因为这些菜单项具有精灵的特点我们可以让精灵动起来具体使用时候是把一个精灵放置到菜单中作为菜单项. 精灵菜单类MenuItemSprite它的其中一个创建函数create定义如下 static MenuItemSprite* create ( Node * normalSprite, //菜单项正常显示时候

如何实现JS中鼠标移上去显示图片或微信二维码

废话不多说了,直接给大家贴代码了. <html> <head> <script type="text/javascript"> functionshowImg(){ document.getElementById("wxImg").style.display='block'; } functionhideImg(){ document.getElementById("wxImg").style.display=

JS中用三种方式实现导航菜单中的二级下拉菜单_javascript技巧

我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片.那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style

js实现百度联盟中一款不错的图片切换效果完整实例_javascript技巧

本文实例讲述了js实现百度联盟中一款不错的图片切换效果的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <html> <title>js实现百度联盟中的一个不错的图片切换效果</title> <body> <script> var links = new Array(); links[1] = "http://www.baidu.com/"; links[2] = "http://www.jb5

怎么样用filter过滤器来选择js中的图片。

问题描述 怎么样用filter过滤器来选择js中的图片. 怎么样用filter过滤器来选择js中的图片.在http转到https中,我现在需要通过filter来把js中的图片过滤出来. 解决方案 没学js 不过java的文件过滤器倒是用过,不知能不能帮到你. import java.io.File; import java.io.FileFilter; //继承FileFileter,重写里面的accept() 方法 public class MyDirFilter implements Fil

JS定时器用法分析【时钟与菜单中的应用】_javascript技巧

本文实例分析了JS定时器用法.分享给大家供大家参考,具体如下: 开启定时器: setInterval 间隔型    //一旦启动就不会停,重复执行 setTimeout 延迟型   //只执行一次 停止定时器: clearInterval clearTimeout 关闭定时器如果只是clearInterval()那会关掉所有的定时器,有时我们只需要关掉一个而已,所以要定义一个变量来存放定时器 var timer=null; btn1.onclick=function(){ timer=setIn

JS中使用FormData上传文件、图片的方法_javascript技巧

关于FormData XMLHttpRequest Level 2添加了一个新的接口  ---- FormData 利用FormData对象,可以通过js用一些键值对来模拟一系列表单控件,可以使用XMLHttpRequest的 send( ) 方法来异步提交表单与普通的ajax相比,使用FormData的最大优点就是可以异步上传二进制文件 FormData对象 FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台. 在使用ajax提交时,使用F

求教:MVC中引用js动态创建页面无法获取图片。

问题描述 MVC项目中使用了一个第三方UI组件,在视图中引用该UI的js文件,调用js动态创建页面,其中引用的图片资源无法显示.但是在html文件中使用该js文件,可以正常显示.用firebug调试,发现MVC中的图片路径和html的图片src路径是一样的,但是MVC中的提示"载入指定url失败".由于是第三方UI,无法修改JS文件内容.不知是否可以通过设置MVC的参数实现?小弟刚刚接触MVC不久,求各位大神指点! 解决方案 解决方案二:在你的浏览器中看下图片的url对不对解决方案三:

图片-js中值得获取 被show的select值怎么获取

问题描述 js中值得获取 被show的select值怎么获取 解决方案 解决方案二: 你指的是被show的select的哪个值啊,是id值.class值.name值还是值文本的值? 解决方案三: select下面的option的值 解决方案四: 还是没说明白,看你这每个select下只有一个option,如果要的事select下的option的文本值可以这样 $('.month').eq(i).children().html(); 如果要的是select下的option的value值, $('m