这一节,我将实现游戏的选关界面,游戏50关,每一屏15关,总共4屏,左滑动可切换到上一屏,右滑动可切换到下一屏;
效果如下;
开始进入选关界面;
滑动到最后一屏;
点击关卡,进入主界面;
代码下载:http://www.kuaipan.cn/file/id_25348935635745079.htm?source=1
首先新建,GameSelectLayer.ccbx,GameSelectLayer.js,指定控制器让两个文件关联;设计选关场景如下,调节参数
创建每个单元格关卡GameSelectItemSprite.ccbx,这是一个小精灵层,如下图;
设计完成后,打开MainLayer.js,编写如下:
- GAME_LEVEL = 0;
- var GameSelectLayer = function () {
- cc.log("GameSelectLayer");
- this.levelScrollPanel = this.levelScrollPanel || {};
- this.pageIndex = 0;
- this.pageMax = 4;
- this.dotNode = this.dotNode || {};
- this.start = false;
- };
- GameSelectLayer.prototype.onDidLoadFromCCB = function () {
- if (sys.platform == 'browser') {
- this.onEnter();
- }
- else {
- this.rootNode.onEnter = function () {
- this.controller.onEnter();
- };
- }
- this.rootNode.onExit = function () {
- this.controller.onExit();
- };
- this.rootNode.onTouchesBegan = function (touches, event) {
- this.controller.onTouchesBegan(touches, event);
- return true;
- };
- this.rootNode.onTouchesMoved = function (touches, event) {
- this.controller.onTouchesMoved(touches, event);
- return true;
- };
- this.rootNode.onTouchesEnded = function (touches, event) {
- this.controller.onTouchesEnded(touches, event);
- return true;
- };
- this.rootNode.setTouchEnabled(true);
- };
- GameSelectLayer.prototype.onEnter = function () {
- this.maxColumns = 3;
- this.columnSize = 177;
- this.maxRows = 5;
- this.rowSize = 104;
- cc.log("GameSelectLayer");
- this.itemDatas = [];
- var itemName = "";
- var levelPan = cc.Layer.create();
- var currentLevel = sys.localStorage.getItem("pb_level");
- if (currentLevel == null) {
- currentLevel = 0;
- }
- sys.localStorage.setItem("pb_level_score_1", "S");
- currentLevel = 3;
- for (var i = 0; i < 50; i++) {
- var xIndex = Math.floor(i % 3) + Math.floor(i / 15) * 3;
- var yIndex = Math.floor(i / 3 % 5);
- var levelScore = "A"
- if (i < currentLevel) {
- levelScore = sys.localStorage.getItem("pb_level_score_" + i);
- if (levelScore == null || levelScore == '') {
- levelScore = "A";
- }
- if ("S" == levelScore) {
- itemName = "GameSelectItemScoreS";
- }
- else {
- itemName = "GameSelectItemScore";
- }
- }
- else if (i == currentLevel) {
- itemName = "GameSelectItemLevel";
- }
- else {
- itemName = "GameSelectItemLocked";
- }
- var itemData = {
- xIndex: xIndex,
- yIndex: yIndex,
- index: i,
- type: itemName,
- onItemAction: function () {
- cc.log("onItemAction");
- var action = cc.ScaleBy.create(0.5, 0.8);
- this.rootNode.runAction(cc.Sequence.create(
- action, action.reverse(), cc.DelayTime.create(2)
- // cc.CallFunc.create(this.onItemClicked())
- ));
- },
- onItemClicked: function () {
- cc.log("onItemClicked");
- GAME_LEVEL = (this.index + 1);
- require("MainLayer.js");
- cc.BuilderReader.runScene("", "MainLayer");
- },
- onLockOpened: function () {
- }
- };
- var item = cc.BuilderReader.loadAsNodeFrom("", "GameSelectItemSprite", itemData);
- if (item == null) {
- continue;
- }
- item.setPosition(cc.p(this.columnSize * xIndex, this.rowSize * (4 - yIndex)));
- item.setZOrder(11);
- itemData.rootNode = item;
- itemData.controller = this;
- this.itemDatas.push(itemData);
- itemData.levelNum.setString("" + (i + 1));
- levelPan.addChild(item);
- }
- levelPan.setContentSize(cc.size(this.columnSize * 12, this.rowSize * 5));
- this.levelScrollPanel.setTouchEnabled(false);
- this.levelScrollPanel.setBounceable(true);
- this.levelScrollPanel.setContainer(levelPan);
- this.levelScrollPanel.setTouchPriority(-99999);
- this.pageDots(0);
- }
- GameSelectLayer.prototype.onUpdate = function () {
- }
- GameSelectLayer.prototype.onExit = function () {
- }
- GameSelectLayer.prototype.onTouchesBegan = function (touches, event) {
- cc.log("onTouchesBegan");
- this.beganPosition = touches[0].getLocation();
- }
- GameSelectLayer.prototype.onTouchesMoved = function (touches, event) {
- this.movePosition = touches[0].getLocation();
- }
- GameSelectLayer.prototype.onTouchesEnded = function (touches, event) {
- cc.log("onTouchesEnded");
- var loc = touches[0].getLocation();
- var distanceX = this.beganPosition.x - loc.x;
- var x = this.levelScrollPanel.getContentOffset().x;
- var y = this.levelScrollPanel.getContentOffset().y;
- this.levelScrollPanel.unscheduleAllCallbacks();
- if (distanceX > 50) {
- if (this.pageIndex < 4) {
- this.pageIndex += 1;
- }
- this.pageDots(this.pageIndex);
- }
- else if (distanceX < -50) {
- if (this.pageIndex > 0) {
- this.pageIndex -= 1;
- }
- this.pageDots(this.pageIndex);
- }
- else {
- this.onItemClicked(loc);
- }
- this.levelScrollPanel.setContentOffsetInDuration(cc.p(-this.columnSize * 3 * this.pageIndex, y), 0.5);
- }
- GameSelectLayer.prototype.onItemClicked = function (location) {
- var x = location.x;
- var y = location.y;
- if (!isInScroll(location)) {
- cc.log("out");
- return;
- }
- var scrollPanelRect = this.levelScrollPanel.getBoundingBox();
- var xIndex = Math.floor((x - 110) / this.columnSize) + this.pageIndex * 3;
- var yIndex = 4 - Math.floor((y - 385) / this.rowSize);
- cc.log("scrollX==" + scrollPanelRect.x + ",scrollY==" + scrollPanelRect.y);
- cc.log("xIndex==" + xIndex + ",yIndex==" + yIndex);
- for (var i = 0; i < this.itemDatas.length; i++) {
- if (this.itemDatas[i].xIndex == xIndex && this.itemDatas[i].yIndex == yIndex) {
- cc.log("click i=" + i);
- this.itemDatas[i].onItemClicked();
- break;
- }
- }
- }
- GameSelectLayer.prototype.pageDots = function (position) {
- this.dotNode.removeAllChildren();
- for (var i = 0; i < 4; i++) {
- var dots = ["s_point.png", "s_point_s.png"];
- var type = 0;
- if (position == i) {
- type = 1;
- }
- var dotSprite = cc.Sprite.createWithSpriteFrameName(dots[type]);
- dotSprite.setAnchorPoint(cc.p(0, 1));
- dotSprite.setPosition(cc.p(30 * i, 60));
- dotSprite.setZOrder(100);
- this.dotNode.addChild(dotSprite);
- }
- }
- function isInScroll(location) {
- var x = location.x;
- var y = location.y;
- if (x > 110 && x < (110 + 510) && y > 385 && y < (385 + 500)) {
- return true;
- }
- return false
- }
同时修改Main.js,加入,require("GameSelectLayer.js");;
然后修改StartLayer.js,让点击开始后跳转到GameSelectLayer.js;
- //
- // CleanerScoreScene class
- //
- var StartLayer = function () {
- cc.log("StartLayer")
- };
- StartLayer.prototype.onDidLoadFromCCB = function () {
- // this.rootNode.onUpdate = function (dt)
- // {
- // this.controller.onUpdate();
- // };
- // this.rootNode.schedule(this.rootNode.onUpdate);
- if (sys.platform == 'browser') {
- this.onEnter();
- }
- else {
- this.rootNode.onEnter = function () {
- this.controller.onEnter();
- };
- }
- this.rootNode.onExit = function () {
- this.controller.onExit();
- };
- };
- StartLayer.prototype.onEnter = function () {
- }
- StartLayer.prototype.onUpdate = function () {
- }
- StartLayer.prototype.onPlayClicked = function () {
- cc.BuilderReader.runScene("", "GameSelectLayer");
- }
- StartLayer.prototype.onExit = function () {
- }
完成后运行,ok,效果最上面;
下一篇文章 我会介绍cocos2d-x editor的串联游戏流程 笔者(李元友)
资料来源:cocos2d-x editor
相关推荐
《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...
《cocos2d-x 2.2.2:构建跨平台游戏开发的基石》 cocos2d-x 是一个开源的游戏开发框架,以其强大的功能和跨平台性深受开发者喜爱。这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该...
《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...
【cocos2d-x API中文文档】是一份详尽的资料,主要涵盖了cocos2d-x游戏引擎的API,这份文档适用于2015年的最新版本。cocos2d-x是一个基于MIT许可证的开源游戏引擎,它以快速、简单且功能强大的特性闻名,允许开发者...
三、运行 Cocos2d-x 生成解决方案完成之后,如果成功,这时你已经距离完全成功一大半了,接下来,你可以运行一下 Cocos2d-x,看看效果。右建点击解决方案管理中的 HelloWorld 项目,然后设置为启动项目,然后从上面...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...
Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,Cocos2d-x对Spine动画引擎的集成进行了更新,这...
cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...
标题中提到了"Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整",这里面包含了几个关键知识点: 1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、...
《cocos2d-x 动画工具 Flash2Cocos2d-x 1.3:将Flash创意带入移动游戏开发》 在移动游戏开发领域,cocos2d-x是一款广泛使用的开源游戏引擎,以其高效、跨平台的特性深受开发者喜爱。而Flash2Cocos2d-x则是一个专为...
《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...
《cocos2d-x 3.0:游戏开发中的角色移动技术详解》 在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,尤其在移动平台上的应用非常广泛。cocos2d-x 3.0版本带来了许多性能优化和新特性,使得开发者能够更...
三、cocos2d-x 2.1.4 开发实践 1. 游戏架构:cocos2d-x 提供了基本的游戏架构模型,如Scene、Layer、Sprite等,开发者可以快速搭建游戏的基本结构。 2. 动画系统:内置的动画系统支持帧动画和动作动画,使得游戏...
《使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏》...通过学习和分析这个项目,开发者不仅可以掌握cocos2d-x的基本用法,还能了解到益智类游戏的设计思路和实现技巧,为自己的游戏开发之路打下坚实的基础。
《Cocos2d-x实战_Lua卷_第2版》是一本专为游戏开发者准备的指南,主要聚焦于使用Cocos2d-x框架与Lua语言进行游戏开发。Cocos2d-x是一个开源的游戏开发框架,它允许开发者用C++、Lua或者JavaScript编写游戏,并且可以...
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发