cocos2d-js是cocos2d-x的JavaScript版本,真正跨全平台的游戏引擎,采用原生JavaScript语言,可发布到包括Web平台,iOS,Android,Windows Phone8,Mac,Windows等平台。

利用cocos2d-js开发HTML5游戏/动画,我们可以通过SDK也可以直接使用js类库:

l SDK下载:http://cn.cocos2d-x.org/download/

l js类库:http://www.cocos2d-x.org/filecenter/jsbuilder/

先说说SDK的开发步骤:

1、 安装python

2、 解压SDK,运行setup.py

3、 运行cmd,新建cocos2d-js项目:cocos new –l js project_name

4、 使用webStorm等IDE打开项目目录,新建的项目已经有现成HelloWorld例子

5、 了解一下main.js的说明(关于project.json),然后打开resource.js和app.js阅读代码

6、 在app.js中正式开始自己的代码编写。当然,这里可以增加新的js文件,需要修改project.json。

再说说js类库的开发步骤:

1、 下载类库

2、 新建HTML页面,引入相应类库

3、 在onload之后,编写cocos2d-js代码,从cc.game.run()开始。入口代码其实跟SDK开发方式的main.js一样。这里更推荐使用SDK方式,因为可以通过阅读源代码获取API的使用说明。

开始cocos2d-js开发前,需要洗洗脑,知道cocos2d-js的平面坐标情况。这跟HTML和canvas的布局都不一样。

在cocos2d-js游戏中,画面的左下角是(0,0),x从左往右递增,而y是从下往上递增的,跟数学的二维坐标系一致。

Cocos2d-js框架把游戏拆分为很多个场景,当玩家在不同界面切换的时候,框架实际上就是让游戏画面在不同场景中切换。跟Flash一样,cocos2d-js也有最基本的元素——节点Node。节点可以包含子节点,形成树形结构:

然后,Layer、Sprite继承了节点,实现了更多功能,例如Layer用于表示一个面板一个层,Sprite精灵用于加载图片表示人物。而场景本身也是节点,所以场景中可以添加层,层中可以添加层,也可以添加精灵。

接着基于刚新建的HelloWorld,做一个简单的例子。

首先解释一下main.js几行代码。

cc.game.onStart = function(){

    cc.view.adjustViewPort(true); //设置html5的viewport meta属性

    cc.view.setDesignResolutionSize(800, 800, cc.ResolutionPolicy.SHOW_ALL); //设置画面尺寸和适配规则

    cc.view.resizeWithBrowserSize(true); //设置是否跟随浏览器窗口变化

    //load resources

    cc.LoaderScene.preload(g_resources, function () {

        cc.director.runScene(new GameScene());

    }, this);

};

cc.game.run(); //游戏启动

接着修改app.js:

var GameLayer = cc.Layer.extend({

    ctor: function () {

        this._super();

        var size = cc.winSize;

//加载背景图

        var bg = new cc.Sprite("res/bg.jpg");

        this.addChild(bg, 1);

        bg.x = size.width/2;

        bg.y = size.height/2;

//加载5个小人,不断做旋转和放缩

        for (var i = 0; i < 5; i++) {

            var man = new cc.Sprite("res/grossini.png");

            man.runAction(cc.spawn(cc.rotateBy(1, 360, 360), cc.sequence(cc.scaleTo(1, 2), cc.scaleTo(1, 1))).repeatForever());

            this.addChild(man, 2);

            man.x = size.width*Math.random();

            man.y = size.height*Math.random();

        }

//加载5个小人,不断做14帧的动画播放

        for (var j = 0; j < 5; j++) {

            var man = new cc.Sprite();

            var animation = new cc.Animation();

            for (var i = 1; i <= 14; i++) {

                animation.addSpriteFrameWithFile("res/grossini_dance_" + (i < 10 ? ("0" + i) : i) + ".png");

            }

            animation.setDelayPerUnit(1 / 7); //控制动画播放频率

            man.runAction(cc.animate(animation).repeatForever());

            man.x = size.width*Math.random();

            man.y = size.height*Math.random();

            this.addChild(man, 3);

        }

        return true;

    }

});

var GameScene = cc.Scene.extend({

    onEnter:function () {

        this._super();

        var layer = new GameLayer();

        this.addChild(layer);

    }

});

利用Webstorm的服务器功能,右击index.html使用chrome运行:

可以看到一堆小人:

通过这个简单例子,我们对cocos2d-js制作HTML5有了初步印象。后续就可以继续学习官方SDK中附带的samples了,里边的js-tests项目中包含了几乎全部cocos2d-js功能的实例程序,例如:定时器、精灵动作、帧动画、骨骼动画、粒子系统、界面编辑器等等。

后边,笔者把原来starling的小游戏Hungry hero改造一下,使用cocos2d-js重新实现。这是一个跑酷游戏,玩家需要控制超人不断吃食物,同时避开障碍物。

演示地址:

http://kenkozheng.github.io/cocos/hungry_hero/index.html

代码地址:

https://github.com/kenkozheng/cocos2d-js/tree/master/hungry_hero

游戏中使用到:

1、 基本:鼠标事件、帧动画、声音(cc.audioEngine)

2、 平行背景(自行实现)

3、 对象池(cc.pool)

4、 粒子系统(cc.ParticleSystem)

5、 位图字体(cc.LabelBMFont)

6、 批量渲染层(cc.SpriteBatchNode)

具体的每个知识点就不在这里详细介绍了,具体可以搜索官方SDK samples中的例子。

cocos2d-js 入门 (主要是HTML5)的更多相关文章

  1. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  2. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  4. React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了

    原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...

  5. cocos2d js jsb XMLHttpRequest 中文乱码

    1.首先讲下怎样使用XMLHttpRequest 下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中. 首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另 ...

  6. 极简 Node.js 入门 - Node.js 是什么、性能有优势?

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. 极简 Node.js 入门 - 1.4 NPM & package.json

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  8. 极简 Node.js 入门 - 3.3 文件写入

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  9. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  10. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

随机推荐

  1. SVG 使用marker画箭头(一)

    一.使用Marker画箭头 1.定义一个箭头的marker引用 <defs> <marker id='markerArrow' markerWidth='13' markerHeig ...

  2. 【Android归纳】开发中应该注意的事项

    1.子线程中不能更新界面,更新界面必须在主线程中进行 2.Fragment注意的事项: a)  Activity调用Fragment中的方法 b)  Thread或者Handler调用Fragment ...

  3. CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析

    php代码很简单: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,& ...

  4. C#自带类库实现邮件发送

    1.首先引入命名空间using System.Net.Mail; 2.将发送的邮件的功能封装成一个类,该类中包含了发送邮件的基本功能:收件人(多人),抄送(多人),发送人,主题,邮件正文,附件等,封装 ...

  5. Swift3.0:照片选择

    一.介绍 图片选择或者拍照功能: 1.选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController ...

  6. OpenGL和D3D11中的深度模版测试

        在OpenGL和D3D11的管线中,像素shader之后的操作就是深度模版测试,深度模版测试是以sample为单位进行的,就是一个像素上可以有多个采样点,每个采样点都有深度信息.深度模版测试对 ...

  7. C/C++ 指针函数 与 函数指针

    指针函数是个函数,是返回指针类型到函数. 函数指针是个指针,是指向函数地址到指针. 区分两者的关键点是,函数名是否用*和括号“包围”起来. #include <stdio.h> int * ...

  8. 构建-4 dependencies 依赖管理

    官方文档 Add build dependencies The Gradle build system in Android Studio makes it easy to include exter ...

  9. Js组件的一些写法

    首先看下Prototype里的写法: var Class = { create: function() { return function() { this.init.apply(this, argu ...

  10. C# 二种方法控制系统音量/麦克风大小

    场景:在做播放设备的时候需要控制音量的大小,下面几种方法将满足你的要求 方法一: 改变系统音量设置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...