Cocos Createor

资源


场景

  1. 节点树
  2. 节点与组件
  3. 坐标系

脚本

  1. 组件声明,生命周期回调
var Component = cc.Class({
// 用于序列化,可省略
name: 'some Name',
// 构造函数
cotr: function() {
// 不会覆盖父类的构造函数,自动调用父类构造方法
cc.log(this instanceof Component);
},
// 继承
extends: cc.Component,
// 属性声明,可在编辑器<属性检查其>中可视化编辑。需声明类型
properties: {
id: 20, // value
target: cc.Node, // constructor
pos: new cc.Vec2(10, 20), // obj
frames: [cc.SpriteFrame], // array
// 完整声明
score: {
default: 0,
displayName: "<属性检查器>标签名",
tooltip: "<属性检查器>提示",
visible: true,
serializable: true, // false不可序列化(保存)
type: cc.Label,
}
}, // LIFE-CYCLE CALLBACKS:
onLoad: function() {
cc.log("All nodes loaded..");
},
start: function() {
cc.log("All component loaded.");
},
update: function() {
cc.log("request frame.");
},
lateUpdate: function() {
cc.log("After frame update.");
},
onDestory: function() {
cc.log("will be destoried.");
},
onEnable: function() {
cc.log("activate");
},
onDisable: function() {
cc.log("disabled.");
},
});
  1. 节点访问

    • 直接创建

      var node = new cc.Node('Sprite');
    • 克隆已有节点

      var node = cc.instantiate(this.someNodeTarget);
    • 创建预制

      var node = cc.instantiate(this.somePrefab);
    • 销毁节点

      someNode.destory();

      removeFromParent()只是从父节点移除(可能移动到其他节点下面),不会释放内存

    • 访问组件/节点

      cc.Node.getComponent(); // 访问组件
      cc.Node.prop = cc.Node node; // 属性引用
      cc.node.children; // 访问子节点
      cc.node.getChildByName(); // 子查找
      cc.Node.find(path, [root]); // 绝对/相对路径查找
    • 全局模块

      // Global.js
      module.exports = {foo: null, bar: null};
      // somewhere
      Global.foo = this.node;
      Global.bar = this.getComponent(cc.Label);
  2. 场景加载

    • 直接加载

      cc.director.loadScene("MyScene");
    • 加载回调

      cc.director.loadScene("MyScene", onSceneLaunched);
      onSceneLaunched: function() {
      cc.game.addPersistRootNode(myNode); // 设置常驻节点,用以在不同场景间保留公共数据(角色信息等。。)
      }
    • 预加载

      cc.director.preloadSence("senceName", cbFn);
      cc.director.loadScene("sceneName");//后台静默加载,需要手动切换
  3. 资源加载

    • 资源可以作为属性进行设置,也可动态加载
    • 动态加载资源必须放在assets/resources及其子文件夹下面
    • 资源的释放需注意依赖关系
    cc.loader.loadRes(path, cc.Type, cbFn); // 指定类型加载
    
    cc.loader.loadResDir(dir, cbFn); // 批量加载文件夹
    
    cc.loader.load(remoteUrl, cbFn); // 加载远程资源(仅图片,声音,文本),受跨域策略限制
    
    cc.loader.release(texture);// 直接释放单个资源(无依赖关系)
    
    // 释放预制(包含其他依赖)以及它所依赖的资源
    var deps = cc.loader.getDependsRecursively(prefab); // 获取其依赖的资源
    var idx = deps.indexOf(extra._uuid); // 查找不想释放的依赖资源
    index != -1 && deps.splice(idx, 1); // 从集合中移除
    cc.loader.release(deps);// 释放所有依赖资源
  4. 事件监听

    • 系统内置事件

    • 自定义事件
      • emit(event, args) 仅节点内
      • dispatchEvent(cc.Event.EventCustom(event, args)) 通过节点树冒泡传递,可通过event.stopPropagation()停止冒泡
  5. 动作/动画

    • 基本动作 https://docs.cocos.com/creator/manual/zh/scripting/action-list.html

      • moveTo(duration, cc.V2)
      • moveBy(duration, cc.V2)
      • scaleTo(duration, times)
      • skewTo(duration, angle)
      • rotateTo(duration, angle)
      • ...
    • 播放动作

      var act1 = cc.spawn(part1, part2); // 同步动作
      var act2 = act1.speed(2); // 与act1相同的动作,但以2倍速度播放
      var cbFn = cc.callFunc(func, root, args);
      var act3 = cc.repeat(act2); // 重复动作act3
      var act4 = cc.sequence(act1, cbFn, act2, act3); // 顺序动作/回调
      var action = cc.repeatForever(act4); // 循环重复
      cc.node.runAction(action); // 执行动作
    • cc.tween

      cc.Action的再封装,链式调用更加简洁易用。

      cc.tween(node)
      .to(duration, {scale: x, moveTo: y}) // 相当于 cc.spawn(cc.scale(x), cc.moveTo(y))
      .by(duration, {scale: x, moveTo: y}) // 同上
      .to(duration, action, {easing: 'sineOutIn'}) // 同时制定缓动函数
      .parallel(
      cc.tween().to(1, action),
      cc.tween().to(2, action), // 同步执行两个 cc.tween
      )
      .call( () => {console.log("callback function.")} ) // 插入回调
      .then(cc.tween().to()) // 嵌套组合
      .repeat(times) // 重复以上所有动作
      .delay(sec) // 延迟执行
      .repeat(times, cc.tween()) // 仅重复这个动作
      .start()
  6. 高级应用

    • 执行顺序

      • 手动控制。通过自定义load,update方法,统一控制

        // Game.js
        const Player = require('Player');
        const Enemy = require('Enemy');
        const Menu = require('Menu');
        cc.Class({
        properties: {
        player: Player,
        enemy: Enemy,
        menu: Menu,
        },
        onLoad: function() {
        this.player.init();
        this.enemy.init();
        this.menu.init();
        },
        update: function(dt) {
        this.player.updatePlayer(dt);
        this.enemy.updateEnemy(dt);
        this.menu.updateMenu(dt);
        }
        })
      • executionOrder

      cc.Class({
      editor: {
      executionOrder: -1 // 默认值0,值越小优先级越高
      }
      });
    • 网络请求

      • XMLHttpRequest (Ajax)
      • WebSocket
    • 对象池 cc.NodePool

      • 减少资源的重复创建与销毁
      • 循环利用的大量Prefab
      • unuse()reuse() ?

Cocos Creator 入门的更多相关文章

  1. cocos creator入门

    前面的话 Cocos Creator 是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现,以及快速开发游戏所需要的各种图形界面工具.Cocos Creator ...

  2. Cocos Creator - 入门教程项目 - 博客频道 - CSDN.NET

    3457 教程司令部 [20160418] | Cocos Creator - CocoaChina CocoaChina_让移动开发更简单cocoachina.com 2033 Cocos Crea ...

  3. cocos creator 入门理解点

    简单解释, [来源:官方文档] Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项.游戏制作.到打包上线的全套流程.开发者可以通过cocos快速生成代码.编辑资源和动画,最终输出适合于 ...

  4. cocos creator主程入门教程(七)—— MVC架构

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...

  5. cocos creator主程入门教程(一)—— 初识creator

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 我们在cocos creator新建一个Hello TypeScript项目,都会有一个assets/S ...

  6. cocos creator 3D | 拇指投篮 | 3D项目入门实战

    你的命中率是多少呢?文章底部试玩! 效果预览 配置环境: Cocos Creator 3D v1.0.1 玩法说明: 触摸屏幕,向上滑动投篮!注意篮板是会移动的哦!看看你的命中率是多少! 实现原理 为 ...

  7. 分形的奥秘!分形着色器!shader 编程入门实战 ! Cocos Creator!

    极致的数学之美! 什么是分形? "一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状" 简单来说,分形(fractal)就像这个doge表情包 ...

  8. 触控的手牌—Cocos Creator

    科普 Cocos Creator是触控最新一代游戏工具链的名称.如果不太清楚的,可以先看一些新闻.   新编辑器Cocos Creator发布: 对不起我来晚了! http://ol.tgbus.co ...

  9. <1>Cocos Creator安装和启动

    学习之间需要了解JavaScritp基本语法和面向对象,详情参考https://blog.csdn.net/jadeshu/article/category/7476938 1.下载Cocos Cre ...

随机推荐

  1. JavaScript笔记——基础知识(二)

    Function类型 函数function不需要返回类型(不是没有返回值),参数也不需要指定类型,更为特殊的是函数竟然是个类,可以通过new出来 var box= new Function('num1 ...

  2. C# 读取INI

    虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中. INI文件是文 ...

  3. SQL Server2005中文版x64安装29506错误解决办法

    在使用SQL Server 2005简体中版安装时,使用X86(32位操作系统下)安装没有出现任何问题.可是在X64(64位操作系统下)安装过程没有出现问题,可是安装完成后却没有Microsoft S ...

  4. a标签的四个伪类是什么?如何排序?为什么?

    爱恨分明原则: l v h a 注释:为了产生预期的效果,在 CSS 定义中,a:hover 必须位于 a:link 和 a:visited 之后 ! 注释:为了产生预期的效果,在 CSS 定义中,a ...

  5. spring-cloud配置高可用eureka服务端

    spring-cloud配置eureka服务端 eureka用来发现其他程序 依赖 <?xml version="1.0" encoding="UTF-8" ...

  6. Windows + Ubuntu 双系统安装

    前言:本篇文章是对之前文章的更新,更新的主内容是把原来用手机拍摄的图片换成了虚拟机的截图,以及对磁盘划分的新的见解和一些使用感受,原本是打算删除之前的那篇Win + Ubuntu双系统的文章的,后来想 ...

  7. Redhat 无线(Wifi)上网命令行配置

    小结两种命令行模式下配置无线wife的方法,实践测试通过(Red Hat Enterprise Linux release 6.0 Beta(Santiago)) 一.使用wpa_supplicant ...

  8. python数据字典的操作

    一.什么是字典? 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器 ...

  9. 嵌入式&nbsp;Linux&nbsp;与linux启…

    一.在ARM linux 下,一般而言,产品在启动的过程中应该加载模块,最简单的方法是修改启动过程的rc脚本(/etc/init.d/rcS),增加ismod /../xxx.ko这个命令.例如:加载 ...

  10. Oracle 中 over() 函数

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...