zoukankan      html  css  js  c++  java
  • Cocos2d-JS中的精灵菜单和图片菜单

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

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. ctor(normalSprite,                                  //菜单项正常显示时候的精灵  
    2.             selectedSprite,                         //选择菜单项时候的精灵  
    3.             callback,                               //菜单操作的回调函数指针  
    4.             target  
    5. )   

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

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. ctor(normalImage,                           //菜单项正常显示时候的图片  
    2.             selectedImage,                          //选择菜单项时候的图片  
    3.             callback,                               //菜单操作的回调函数指针  
    4.             target  
    5. )   

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

    精灵菜单和图片菜单实例

    下面我们看看app.js 中HelloWorldLayer中初始化代码如下: 

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. var HelloWorldLayer = cc.Layer.extend({  
    2.       
    3.             ctor:function () {  
    4.      
    5.         this._super();  
    6.   
    7.   
    8.         var size = cc.director.getWinSize();  
    9.   
    10.   
    11.         var bg = new cc.Sprite(res.background_png);  
    12.         bg.x = size.width/2;  
    13.         bg.y = size.height/2;  
    14.         this.addChild(bg);          
    15.           
    16.         // 开始精灵  
    17.         var startSpriteNormal = new cc.Sprite(res.start_up_png);                        ①  
    18.         var startSpriteSelected = new cc.Sprite(res.start_down_png);                    ②  
    19.         var startMenuItem = new cc.MenuItemSprite(  
    20.                 startSpriteNormal,  
    21.                 startSpriteSelected,  
    22.                 this.menuItemStartCallback, this);                              ③  
    23.         startMenuItem.x = 700;                                          ④  
    24.         startMenuItem.y = size.height - 170;                                    ⑤  
    25.           
    26.         // 设置图片菜单  
    27.         var settingMenuItem = new cc.MenuItemImage(  
    28.                 res.setting_up_png,  
    29.                 res.setting_down_png,  
    30.                 this.menuItemSettingCallback, this);                                ⑥  
    31.         settingMenuItem.x = 480;  
    32.         settingMenuItem.y = size.height - 400;                                
    33.   
    34.   
    35.         // 帮助图片菜单  
    36.         var helpMenuItem = new cc.MenuItemImage(  
    37.                 res.help_up_png,  
    38.                 res.help_down_png,  
    39.                 this.menuItemHelpCallback, this);                               ⑦  
    40.         helpMenuItem.x = 860;  
    41.         helpMenuItem.y = size.height - 480;                                       
    42.   
    43.   
    44.         var mu = new cc.Menu(startMenuItem, settingMenuItem, helpMenuItem);         ⑧  
    45.         mu.x = 0;     
    46.         mu.y = 0;  
    47.         this.addChild(mu);                                                
    48.     },  
    49.     menuItemStartCallback:function (sender) {  
    50.         cc.log("menuItemStartCallback!");  
    51.     },  
    52.     menuItemSettingCallback:function (sender) {  
    53.         cc.log("menuItemSettingCallback!");  
    54.     },  
    55.     menuItemHelpCallback:function (sender) {  
    56.         cc.log("menuItemHelpCallback!");  
    57.     }      
    58. });  

    在上面的代码中第①~②行是创建两种不同状态的精灵,第③行代码是创建精灵菜单项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文件,内容如下:

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. cc.game.onStart = function(){  
    2.     cc.view.setDesignResolutionSize(1136, 640, cc.ResolutionPolicy.EXACT_FIT);      ①  
    3.     cc.view.resizeWithBrowserSize(true);  
    4.     //load resources  
    5.     cc.LoaderScene.preload(g_resources, function () {  
    6.         cc.director.runScene(new HelloWorldScene());  
    7.     }, this);  
    8. };  
    9. cc.game.run();  

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

    更多内容请关注最新Cocos图书《Cocos2d-x实战:JS卷——Cocos2d-JS开发》

    本书交流讨论网站:http://www.cocoagame.net

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

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

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

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

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

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/4363649.html
Copyright © 2011-2022 走看看