昨天接触到了cocos2d-html5的的东东了, 第一次看其源代码一头雾水,幸好samples目录下面有几个例子,可以从这个入手。

MoonWarriors是一个射击类的游戏, 有点像以前玩的雷电, 一边看代码,一边玩这个游戏,基本上理解了cocos2d里面的一些基本的概念。

游戏里面有四个基本的概念,director, scene, layer, objects(spirte, menuitem, 等).

director负责scene的切换,一个scene可以有很多的layer, 每个layer上面可以画很多类型的object, 像飞船, 子弹,还有爆炸效果这些都是某种sprite。还有一些menu的控件,label, menuItem之类的。layer可以处理鼠标,键盘和触摸事件, 还可以注册timer事件。

游戏的初始化

整个App以一个最初的scene来初始化, 在资源加载完就切换到这个scene, 比如MoonWarriors代码main.js, 里面cocos2dApp是从cocos2d里面的Application派生来的。

var myApp = new cocos2dApp(SysMenu.scene);

在这个构造函数里面会去进行cocos2d的setup, 然后load一些资源,在资源load完以后, 会回调applicationDidFinishLaunching最后会切换到 sysMenu这个场景了.

cc.Director.getInstance().replaceScene(new this.startScene());

这儿用的是Director来切换场景的, Director是个全局的单例对象。

场景切换

sysMenu 这一层主要就三个按钮, newGame, about, settings。还有一些动画效果。

在sysMenu这一层,在init函数里面,会用Spirte, Menu之类的画按钮和一些显示效果, 并且这些按钮之类的可以设置回调函数。

比如 about按钮

var about = cc.MenuItemSprite.create(aboutNormal, aboutSelected, aboutDisabled, this.onAbout, this);

然后在about点击后,按钮的回调函数里面会切换到about场景..

onAbout:function (pSender) {
this.onButtonEffect();
var scene = cc.Scene.create();
scene.addChild(AboutLayer.create());
cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.2, scene));
}

About, Setting这俩个scene和这个类似吧, 显示一些游戏相关文字,然后在按钮的回调函数里面切换场景。

事件处理

在GameLayer这一层,就是主要的游戏咯,它处理touchmove, mouseMove等时间,然后更新画面.(其实吧,我觉得所有游戏都是这样子的), layer首先需要先设置以下这个层是否需要处理这些事件。

    if( 'keyboard' in sys.capabilities )
this.setKeyboardEnabled(true); if( 'mouse' in sys.capabilities )
this.setMouseEnabled(true); if( 'touches' in sys.capabilities )
this.setTouchEnabled(true);

然后在对应的回调函数onTouchesMovedonMouseDraggedonKeyDownonKeyUp处理相应的事件。

update和timer

每个layer都有一个update函数,会调用这个来更新layer, 然后可以用schedule这个函数注册一个类似于timeout的回调函数, 在GameLayer.init里面这样用了

    this.scheduleUpdate();
this.schedule(this.scoreCounter, 1);
this.schedule(this.movingBackground, 3);

然后在GameLayer.update负责更新画面, movingBackground去移动背景,scoreCounter负责统计分数以及关卡的管理.

Sprite

游戏里面的飞船,子弹,还有敌人, 以及爆炸的效果都是派生自Sprite这个类,Spirte给我感觉就是加载图片,然后对图片做各种动画效果。然后提供了各种函数比如移动, 放大, blend color之类对这些图片作变换。一般带动画效果的都可以用这个Sprite.

Cocos2d html5 笔记 1: overview的更多相关文章

  1. HTML5笔记3——Web Storage和本地数据库

    上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storag ...

  2. css3 和 html5 笔记

    1.css3 ie下大部分不兼容 ie9以下 浏览器低版本不兼容 需要写 -webket-transition:1s -moz-transition: 1s -o-transition:1s tran ...

  3. COCOS2D 学习笔记

    cc.Node.scheduleUpdate:function () * schedules the "update" method.                       ...

  4. Html5笔记 表格 布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. HTML5笔记2——HTML5音/视频标签详解

    音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...

  6. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  7. HTML5笔记1——HTML5的发展史及标签的改变

    记得第一次接触HTML5还是在<联信永益>实习那会儿(2011),当时一个项目技术选型的时候面临两种选择,分别是Silverlight和HTML5,那是用的最新的IE浏览器版本还是IE9, ...

  8. cocos2d学习笔记

    doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner  收费的 CCLabl ...

  9. html5笔记

    出处:http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html HTML5 LocalStorage 本地存储 HTML5  ...

随机推荐

  1. 流式计算之Storm简介

    Storm是一个分布式的.容错的实时计算系统,遵循Eclipse Public License 1.0,Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比H ...

  2. Chapter 3 Start Caffe with MNIST Demo

    先从一个具体的例子来开始Caffe,以MNIST手写数据为例. 1.下载数据 下载mnist到caffe-master\data\mnist文件夹. THE MNIST DATABASE:Yann L ...

  3. 二、 C#调用存储过程

    个人比较喜欢使用第二种传递参数的方法 1. 调用的方法 public DataTable ExceStoredProcedure (string strCom, SqlParameter[] comm ...

  4. 从Mac的Finder中访问你的iCloud文档

    [从Mac的Finder中访问你的iCloud文档] 从OS X 10.7.2开始,iCloud就深入Mac当中,我们也可以在Finder中访问储存在iCloud中的文件,甚至当你拥有多台Mac的时候 ...

  5. oracle数据库连接字符串

    不在项目加入tsname.ora的托管写法: <add name="CONN" connectionString="data source=127.0.0.1:15 ...

  6. JVM启动参数小结

    一:JVM启动参数共分为三类:         其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:        其二是非标准参数(-X),指的是JVM底层的一些配置参数, ...

  7. java_web用户的自动登录模块的实现

    javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serializable{ / ...

  8. OC:通讯录实战

    实战(使用OC的知识制作一个简易通讯录) //语法糖.笑笑语法 // NSString * string = [NSString stringWithFormat:@"string" ...

  9. Linux下 如何正确配置 Nginx + PHP

    假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由. 一般这样配置 此时很多教程会教大家这样配置 ...

  10. extjs tablepanel 高度自适应有关问题

    extjs tablepanel 高度自适应问题 项目中为了给客户好点的功能切换体验,想到了用extjs的tabpanel 在页面中用了tabpanel后,高度新打开的tab页的iframe 的高度总 ...