我们谈一谈CocosCreator

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

内容简介:作者:不洗碗工作室 - 欣仔版权归作者所有,转载请注明出处我们创建一个场景时,默认会创建一个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)

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

查看所有标签

猜你喜欢:

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

更快速网站

更快速网站

Steve Souders / 2009年12月 / 42.00元

对于任何成功的网站来说,性能是至关重要的。但伴随着不断增长的丰富内容和Ajax的过度使用,如今的Web应用已经将浏览器推至性能极限。在本书中,Google的Web性能专家和前任雅虎首席网站性能官Steve Souders提供了宝贵的技术,来帮助你优化网站性能。 作者的上一本书是非常畅销的《High Performance Web Sites》,它透露了80%的网页加载时间是花在客户端,使网络......一起来看看 《更快速网站》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

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

RGB CMYK 互转工具