我们谈一谈CocosCreator

栏目: 编程语言 · IOS · 发布时间: 7年前

内容简介:作者:不洗碗工作室 - 欣仔版权归作者所有,转载请注明出处我们创建一个场景时,默认会创建一个Canvas节点,之后我们可以在Canvas下创建子节点或在Canvas同级创建兄弟节点。

作者:不洗碗工作室 - 欣仔

版权归作者所有,转载请注明出处

节点操作

我们创建一个场景时,默认会创建一个Canvas节点,之后我们可以在Canvas下创建子节点或在Canvas同级创建兄弟节点。

在节点上,我们可以挂载各种各样的组件,也可以自定义自己的脚本组件,当我们挂载了脚本组件在一个节点上的时候我们可以在脚本中如下操作节点的属性:

this   // 代表了当前的组件
this.node   // 代表该组件挂载的节点
this.node.parent   // 该组件挂载节点的父节点
this.node.children   // 该组件挂载节点的子节点数组
this.node.getChildByName('子节点的名字')   // 获取指定子节点

一个比较好的拿到节点的方式是可以在properties中定义cc.Node,然后我们拖节点到该属性中

查找节点

cc.find

// 找node-1下node-2中的精灵组件
cc.find('node-1/node-2<cc.Sprite>')

动作

动作的API由节点提供,所以我们使用this.node调用,节点的位置是相对父节点定位的

时间间隔动作

cc.moveTo(持续时间,位置)
cc.moveTo(1, cc.v2(1, 1))或cc.moveTo(1, 1, 1)
/*  旋转  */
cc.rotateTo(1, 180)   // 1s 旋转180度
/*  缩放  */
cc.scareTo(1, 2, 2)   // 1s 放大1倍
/*  透明度  */
cc.fadeOut(1)   // 1s 变透明

即时动作

cc.removeSelf()  // 将自己从父节点删除(不代表自己被删除)
cc.removeSelf(true)   // 将自己删除
cc.sequence()   // 动画顺序执行
cc.callFunc(回调,this指向,传入的参数)
(self, args) => {}   // 回调
easing()   // 缓动函数,传入缓动类型

事件

// 自定义事件
this.node.on('eventName', 'func', context)
this.node.emit('eventName', args)
this.node.once
this.node.off
(e) => e.detail   //e.detail为传入的参数

系统事件

触摸事件

事件有节点的作用域,在该节点定义的事件只有在该节点范围内点击才有效

this.node.on('touchstart', (e) => {}, this)
this.node.on('touchmove', (e) => {}, this)
this.node.on('touchend', (e) => {}, this)
this.node.on('touchcancel', (e) => {}, this)  // 移到节点外
/*  坐标转换  */
this.node.on('touchstart', (e) => {
    e.getLocation()   // 得到全局坐标系的坐标,(以左下角为坐标原点)
    // 从全局坐标系转到本地坐标系
    // 转到this.node坐标系下的相对坐标系
    let locationOfThisNode = this.node.convertToNodeSpaceAR(e.getLocation())
    // 转到父节点下的坐标系
    let locationOfThisNodeParent = this.node.parent.convertToNodeSpaceAR(e.getLocation())
    // 这样就将节点移到点击的位置了
    this.node.position = locationOfThisNodeParent
})

鼠标事件

this.node.on('mouseup', () => {}, context)
this.node.on('mousemove', () => {}, context)
this.node.on('mousedown', () => {}, context)
this.node.on('mouseenter', () => {}, context)
this.node.on('mouseleave', () => {}, context)
this.node.on('mousewheel', () => {}, context)

键盘事件

cc.systemEvent.on('keydown', () => {}, context)
cc.systemEvent.on('keyup', () => {}, context)
cc.systemEvent.on('keydown', (e) => {
    if(e.keyCode === cc.KEY.w) {
        console.log('按下了w')
    }
})

预制体

我们来动态生成一个节点

let tmpNode = new cc.Node()
tmpNode.name = '新节点'
// 将该节点添加到节点树中
this.node.addChild(tmpNode)
/*  下面是组件  */
let sprite = this.node.addComponent('cc.Sprite')
this.node.removeComponent('cc.Sprite')
this.node.getComponent('cc.Sprite')

下面用预制体生成节点

let node = cc.instantitate('预制体')
this.node.addChild(node)

预制体只能保存本组件内的东西,如果里面有其他组件的引用,则不会保存

全局变量

// 设置在window上的属性是全局可用的,因为window是全局可用的
window.a = 1
// module.export 和 require
module.export = {a, b, c}
let {a, b, c} = require('模块名')
// static定义的变量会在实例中共享
static: {a: 1}
// addPersistRootNode
cc.game.addPersistRootNode('node1')   // 将节点常驻内存中,不会因为场景的切换而销毁
cc.game.removePersistRootNode('node1')
cc.director.getScene().getChildByName('node1')
// 相当于localStorage
cc.sys.localStorage.getItem()
cc.sys.localStorage.setItem()

计时器

this.schedule(func, 1)
this.unschedule(func)
this.scheduleOnce(func, 1)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

啊哈!算法

啊哈!算法

啊哈磊 / 人民邮电出版社 / 2014-6-1 / 45.00元

这不过是一本有趣的算法书而已。和别的算法书比较,如果硬要说它有什么特点的话,那就是你能看懂它。 这是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点, 通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜 游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。 本书中涉及到的数据结构有栈、队列、链表、树......一起来看看 《啊哈!算法》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具