昨天接触到了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. visual assistent 过期

    VA功能超级好使,下载的一般都有时间限制,但又不想买正版. 我的是32位系统 vs2008: 将VA_X.dll文件拷到 (x86)C:\Program Files\Visual Assist X\ ...

  2. 设计模式 外观 Facade

    外观模式的作用是简化接口.它提供一个统一的接口用来访问子系统的一群接口.通过这个高层接口使子系统更容易使用. 同时,通过外观将客户从组件的子系统中解耦. Head 1st中使用了家庭影院的例子来说明外 ...

  3. ipc.Client: Retrying connect to server: h1/192.168.1.61:9000. Already tried 0 time(s);解决方法

    1.检查namenode服务器的是否运行正常,我的问题是没有开启hadoop集群出现的. 2.检查namenode服务器的防火墙是否开放的响应端口,一般内网建议关闭.

  4. mysql create table - data_type length -- clwu

    mysql create table 时,有时需要指定  data_type length http://dev.mysql.com/doc/refman/5.5/en/create-table.ht ...

  5. SvUDID实现设备唯一标示

    //SvUDIDTools : https://github.com/smileEvday/SvUDID //将生成的UDID保存到钥匙串中,用户卸载app再重新安装UDID也不会改变. /* 用法1 ...

  6. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误

    原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...

  7. ubuntu 14.04 root破解

    Advanced Programmable interrupt controller 高级可编程中断控制;Advanced create table `users` (`id` int(11) not ...

  8. delphi 判断调试状态

    DebugHook 该变量在调试状态下值为1,运行模式为0,例如,我们可以使用如下的代码来简单控制: if DebugHook=0 then

  9. 1.VS2010C++环境设置

    一.需要下载的软件 1.visual studio 2010\\xxzx\tools\编程工具\MICROSOFT\VISUAL.STUDIO\VISUAL.STUDIO.201032位cn_visu ...

  10. HDu 1001 Sum Problem 分类: ACM 2015-06-19 23:38 12人阅读 评论(0) 收藏

    Sum Problem Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...