`
makeapp628
  • 浏览: 43494 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

十三 手游开发神器 cocos2d-x editor 之选关滑动界面(ScrollView)

阅读更多

这一节,我将实现游戏的选关界面,游戏50关,每一屏15关,总共4屏,左滑动可切换到上一屏,右滑动可切换到下一屏;

 

效果如下;

开始进入选关界面;

 

滑动到最后一屏;

 

点击关卡,进入主界面;

 

代码下载:http://www.kuaipan.cn/file/id_25348935635745079.htm?source=1

 

 

首先新建,GameSelectLayer.ccbx,GameSelectLayer.js,指定控制器让两个文件关联;设计选关场景如下,调节参数

 

创建每个单元格关卡GameSelectItemSprite.ccbx,这是一个小精灵层,如下图;

 

 

设计完成后,打开MainLayer.js,编写如下:

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. GAME_LEVEL = 0;  
  2. var GameSelectLayer = function () {  
  3.     cc.log("GameSelectLayer");  
  4.     this.levelScrollPanel = this.levelScrollPanel || {};  
  5.     this.pageIndex = 0;  
  6.     this.pageMax = 4;  
  7.     this.dotNode = this.dotNode || {};  
  8.     this.start = false;  
  9.   
  10. };  
  11.   
  12. GameSelectLayer.prototype.onDidLoadFromCCB = function () {  
  13.     if (sys.platform == 'browser') {  
  14.         this.onEnter();  
  15.     }  
  16.     else {  
  17.         this.rootNode.onEnter = function () {  
  18.             this.controller.onEnter();  
  19.         };  
  20.     }  
  21.   
  22.     this.rootNode.onExit = function () {  
  23.         this.controller.onExit();  
  24.     };  
  25.   
  26.   
  27.     this.rootNode.onTouchesBegan = function (touches, event) {  
  28.         this.controller.onTouchesBegan(touches, event);  
  29.         return true;  
  30.     };  
  31.   
  32.     this.rootNode.onTouchesMoved = function (touches, event) {  
  33.         this.controller.onTouchesMoved(touches, event);  
  34.         return true;  
  35.     };  
  36.     this.rootNode.onTouchesEnded = function (touches, event) {  
  37.         this.controller.onTouchesEnded(touches, event);  
  38.         return true;  
  39.     };  
  40.     this.rootNode.setTouchEnabled(true);  
  41. };  
  42.   
  43. GameSelectLayer.prototype.onEnter = function () {  
  44.     this.maxColumns = 3;  
  45.     this.columnSize = 177;  
  46.     this.maxRows = 5;  
  47.     this.rowSize = 104;  
  48.     cc.log("GameSelectLayer");  
  49.   
  50.     this.itemDatas = [];  
  51.     var itemName = "";  
  52.     var levelPan = cc.Layer.create();  
  53.     var currentLevel = sys.localStorage.getItem("pb_level");  
  54.     if (currentLevel == null) {  
  55.         currentLevel = 0;  
  56.     }  
  57.   
  58.     sys.localStorage.setItem("pb_level_score_1""S");  
  59.     currentLevel = 3;  
  60.   
  61.     for (var i = 0; i < 50; i++) {  
  62.         var xIndex = Math.floor(i % 3) + Math.floor(i / 15) * 3;  
  63.         var yIndex = Math.floor(i / 3 % 5);  
  64.         var levelScore = "A"  
  65.         if (i < currentLevel) {  
  66.             levelScore = sys.localStorage.getItem("pb_level_score_" + i);  
  67.             if (levelScore == null || levelScore == '') {  
  68.                 levelScore = "A";  
  69.             }  
  70.             if ("S" == levelScore) {  
  71.                 itemName = "GameSelectItemScoreS";  
  72.             }  
  73.             else {  
  74.                 itemName = "GameSelectItemScore";  
  75.             }  
  76.         }  
  77.         else if (i == currentLevel) {  
  78.             itemName = "GameSelectItemLevel";  
  79.         }  
  80.         else {  
  81.             itemName = "GameSelectItemLocked";  
  82.         }  
  83.         var itemData = {  
  84.             xIndex: xIndex,  
  85.             yIndex: yIndex,  
  86.             index: i,  
  87.             type: itemName,  
  88.             onItemAction: function () {  
  89.                 cc.log("onItemAction");  
  90.                 var action = cc.ScaleBy.create(0.5, 0.8);  
  91.                 this.rootNode.runAction(cc.Sequence.create(  
  92.                     action, action.reverse(), cc.DelayTime.create(2)  
  93.                     //  cc.CallFunc.create(this.onItemClicked())  
  94.                 ));  
  95.             },  
  96.             onItemClicked: function () {  
  97.                 cc.log("onItemClicked");  
  98.                 GAME_LEVEL = (this.index + 1);  
  99.                 require("MainLayer.js");  
  100.                 cc.BuilderReader.runScene("""MainLayer");  
  101.             },  
  102.             onLockOpened: function () {  
  103.             }  
  104.         };  
  105.         var item = cc.BuilderReader.loadAsNodeFrom("""GameSelectItemSprite", itemData);  
  106.         if (item == null) {  
  107.             continue;  
  108.         }  
  109.         item.setPosition(cc.p(this.columnSize * xIndex, this.rowSize * (4 - yIndex)));  
  110.         item.setZOrder(11);  
  111.         itemData.rootNode = item;  
  112.         itemData.controller = this;  
  113.         this.itemDatas.push(itemData);  
  114.         itemData.levelNum.setString("" + (i + 1));  
  115.         levelPan.addChild(item);  
  116.     }  
  117.     levelPan.setContentSize(cc.size(this.columnSize * 12, this.rowSize * 5));  
  118.     this.levelScrollPanel.setTouchEnabled(false);  
  119.     this.levelScrollPanel.setBounceable(true);  
  120.     this.levelScrollPanel.setContainer(levelPan);  
  121.     this.levelScrollPanel.setTouchPriority(-99999);  
  122.   
  123.     this.pageDots(0);  
  124. }  
  125.   
  126. GameSelectLayer.prototype.onUpdate = function () {  
  127.   
  128. }  
  129.   
  130. GameSelectLayer.prototype.onExit = function () {  
  131.   
  132. }  
  133.   
  134. GameSelectLayer.prototype.onTouchesBegan = function (touches, event) {  
  135.     cc.log("onTouchesBegan");  
  136.     this.beganPosition = touches[0].getLocation();  
  137. }  
  138.   
  139. GameSelectLayer.prototype.onTouchesMoved = function (touches, event) {  
  140.     this.movePosition = touches[0].getLocation();  
  141. }  
  142.   
  143. GameSelectLayer.prototype.onTouchesEnded = function (touches, event) {  
  144.     cc.log("onTouchesEnded");  
  145.     var loc = touches[0].getLocation();  
  146.     var distanceX = this.beganPosition.x - loc.x;  
  147.   
  148.     var x = this.levelScrollPanel.getContentOffset().x;  
  149.     var y = this.levelScrollPanel.getContentOffset().y;  
  150.     this.levelScrollPanel.unscheduleAllCallbacks();  
  151.   
  152.     if (distanceX > 50) {  
  153.         if (this.pageIndex < 4) {  
  154.             this.pageIndex += 1;  
  155.         }  
  156.         this.pageDots(this.pageIndex);  
  157.     }  
  158.     else if (distanceX < -50) {  
  159.         if (this.pageIndex > 0) {  
  160.             this.pageIndex -= 1;  
  161.         }  
  162.         this.pageDots(this.pageIndex);  
  163.     }  
  164.     else {  
  165.         this.onItemClicked(loc);  
  166.     }  
  167.     this.levelScrollPanel.setContentOffsetInDuration(cc.p(-this.columnSize * 3 * this.pageIndex, y), 0.5);  
  168. }  
  169.   
  170. GameSelectLayer.prototype.onItemClicked = function (location) {  
  171.     var x = location.x;  
  172.     var y = location.y;  
  173.   
  174.     if (!isInScroll(location)) {  
  175.         cc.log("out");  
  176.         return;  
  177.     }  
  178.   
  179.     var scrollPanelRect = this.levelScrollPanel.getBoundingBox();  
  180.     var xIndex = Math.floor((x - 110) / this.columnSize) + this.pageIndex * 3;  
  181.     var yIndex = 4 - Math.floor((y - 385) / this.rowSize);  
  182.     cc.log("scrollX==" + scrollPanelRect.x + ",scrollY==" + scrollPanelRect.y);  
  183.     cc.log("xIndex==" + xIndex + ",yIndex==" + yIndex);  
  184.   
  185.     for (var i = 0; i < this.itemDatas.length; i++) {  
  186.         if (this.itemDatas[i].xIndex == xIndex && this.itemDatas[i].yIndex == yIndex) {  
  187.             cc.log("click i=" + i);  
  188.             this.itemDatas[i].onItemClicked();  
  189.             break;  
  190.         }  
  191.     }  
  192. }  
  193.   
  194. GameSelectLayer.prototype.pageDots = function (position) {  
  195.     this.dotNode.removeAllChildren();  
  196.     for (var i = 0; i < 4; i++) {  
  197.         var dots = ["s_point.png""s_point_s.png"];  
  198.         var type = 0;  
  199.         if (position == i) {  
  200.             type = 1;  
  201.         }  
  202.         var dotSprite = cc.Sprite.createWithSpriteFrameName(dots[type]);  
  203.         dotSprite.setAnchorPoint(cc.p(0, 1));  
  204.         dotSprite.setPosition(cc.p(30 * i, 60));  
  205.         dotSprite.setZOrder(100);  
  206.         this.dotNode.addChild(dotSprite);  
  207.     }  
  208. }  
  209.   
  210. function isInScroll(location) {  
  211.     var x = location.x;  
  212.     var y = location.y;  
  213.     if (x > 110 && x < (110 + 510) && y > 385 && y < (385 + 500)) {  
  214.         return true;  
  215.     }  
  216.     return false  
  217. }  


同时修改Main.js,加入,require("GameSelectLayer.js");;

 

然后修改StartLayer.js,让点击开始后跳转到GameSelectLayer.js;

 

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //  
  2. // CleanerScoreScene class  
  3. //  
  4. var StartLayer = function () {  
  5.     cc.log("StartLayer")  
  6. };  
  7.   
  8. StartLayer.prototype.onDidLoadFromCCB = function () {  
  9. //    this.rootNode.onUpdate = function (dt)  
  10. //    {  
  11. //        this.controller.onUpdate();  
  12. //    };  
  13. //    this.rootNode.schedule(this.rootNode.onUpdate);  
  14.   
  15.     if (sys.platform == 'browser') {  
  16.         this.onEnter();  
  17.     }  
  18.     else {  
  19.         this.rootNode.onEnter = function () {  
  20.             this.controller.onEnter();  
  21.         };  
  22.     }  
  23.   
  24.     this.rootNode.onExit = function () {  
  25.         this.controller.onExit();  
  26.     };  
  27. };  
  28.   
  29. StartLayer.prototype.onEnter = function () {  
  30. }  
  31.   
  32. StartLayer.prototype.onUpdate = function () {  
  33.   
  34. }  
  35.   
  36. StartLayer.prototype.onPlayClicked = function () {  
  37.     cc.BuilderReader.runScene("""GameSelectLayer");  
  38. }  
  39.   
  40. StartLayer.prototype.onExit = function () {  
  41.   
  42. }  


完成后运行,ok,效果最上面;

 

下一篇文章 我会介绍cocos2d-x  editor的串联游戏流程    笔者(李元友)

资料来源:cocos2d-x  editor

分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    Cocos2d-x高级开发教程

    Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    Cocos2d-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    Cocos2d-x-UIEditor

    使用cocos2d-x编写的ui编辑器(界面编辑器),实现了ui的可视化编辑,支持sprite、button、label、scale9sprite等等,导出配置文件格式为json格式-Cocos2d-x prepared ui interface editor, ui visual editing ...

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    实例妙解Cocos2D-X游戏开发

    一线资深游戏开发工程师根据Cocos2D-X 最新版本撰写,Cocos2D-X创始人王哲、CSDN创始人蒋涛联袂推荐 完全通过真实游戏案例驱动,不仅将Cocos2D-X的各种功能、原理、技巧融入其中,而且还详细讲解了空战类、塔防类、...

    Cocos2d-x 3.x游戏开发之旅

    本书是《Cocos2d-x 游戏开发之旅》的升级版,修改了2.0版进阶到3.0版后的一些内容,新增了对CocoStudio、UI编辑器、Cocos2d-x 3.0新特性以及网络方面的知识点。主要介绍常用的API使用方式;介绍如何通过官方Demo获取...

    Cocos2d-x高级开发教程制作自己的《捕鱼达人》

    Cocos2d-x高级开发教程:制作自己的《捕鱼达人》 图书简介: 《Cocos2d-x高级开发教程:制作自己的《捕鱼达人》》是国内第一本全面深入讲解Cocos2d-x进阶内容的图书,Cocos2d-x创始人王哲作序推荐,《捕鱼达人》开发...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本

    Cocos2d-x 3.2 大富翁游戏项目开发ScrollView关卡选择

    Cocos2d-x 3.2 大富翁游戏项目开发关卡选择scrollview界面

    大富翁手机游戏开发实战 基于Cocos2d-x3.2引擎

    李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发。本书根据大富翁项目一一展开讲解游戏开发过程中涉及的各方面内容...

    精通Cocos2d-x游戏开发(进阶卷)源代码

    精通Cocos2d-x游戏开发(进阶卷)源代码 精通Cocos2d-x游戏开发(进阶卷)源代码 精通Cocos2d-x游戏开发(进阶卷)源代码

Global site tag (gtag.js) - Google Analytics