读一读

const {ccclass, property} = cc._decorator;

@ccclass
export default class NetStuidy extends cc.Component {


    start () 
    {
        let xhr = new XMLHttpRequest()
        xhr.onreadystatechange = ()=>{
            if(xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)){
                console.log(xhr.responseText)
            }
        }
        xhr.open("GET","http://www.baidu.com",true)
        xhr.send()
    }
}

const {ccclass, property} = cc._decorator;

@ccclass
export default class ScheduleStudy extends cc.Component {

    timer:number = 0

    callback()
    {
        this.timer += 1
        console.log("定时器执行:" + this.timer)
        if(this.timer == 10)
        {
            this.unschedule(this.callback)
            //this.unscheduleAllCallbacks() //取消这个组件所有的定时器
        }
    }

    start () {
        let interval = 2
        let repeat = 20
        let delay = 3
        //3秒后 每隔2秒执行一次callback 重复20次
        this.schedule(this.callback,interval,repeat,delay)
        //this.scheduleOnce(this.callback,delay) 只执行定时器一次
    }
}

缓动系统是对Cocos-x的动作系统的再一层封装,使api更加好用,链式调用,具体使用时可以查看相关的api和具体参数


const {ccclass, property} = cc._decorator;

@ccclass
export default class TweenStudy extends cc.Component {


    start () 
    {
        let tw = new cc.Tween()
        tw.target(this.node).to(1,{position:cc.v2(100,100),rotation:360}) //属性定义多个同时进行
        .to(1,{position:cc.v2(0,200)})
        .call(this.callback.bind(this)) //回调函数
        .start()
    }

    callback()
    {
        let tw = new cc.Tween()
        tw.target(this.node)
        .delay(2) //延迟2s执行
        .repeat(10,new cc.Tween().by(1,{rotation:360})) //重复10次 repeatForever永久重复
        .call(()=>{console.log("执行完成")})
        .start()
    }
}

const {ccclass, property} = cc._decorator;

@ccclass
export default class SysEvent extends cc.Component {

    start () 
    {
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,function(event){
            console.log(event.keyCode + "被按下了")
        })

        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,function(event){
            console.log(event.keyCode + "被抬起了")
        })

        cc.systemEvent.on(cc.SystemEvent.EventType.DEVICEMOTION,function(event){
            console.log(event.acc.x + "  " + event.acc.y) //重力传感
        })
    }
}

触摸事件在移动平台和桌面平台都会触发,属于节点事件

const {ccclass, property} = cc._decorator;

@ccclass
export default class SysEvent extends cc.Component {

    start () 
    {
        //当手指触点落在目标节点区域内时
        this.node.on(cc.Node.EventType.TOUCH_START,function(event:cc.Event.EventTouch){
            console.log("TouchStart")
        })

        //当手指在屏幕上目标节点区域内移动时
        this.node.on(cc.Node.EventType.TOUCH_MOVE,function(event){
            console.log("TouchMove")
        })

        //当手指在目标节点区域内离开屏幕时
        this.node.on(cc.Node.EventType.TOUCH_END,function(event){
            console.log("TouchEnd")
        })

        //当手指在目标节点区域外离开屏幕时
        this.node.on(cc.Node.EventType.TOUCH_CANCEL,function(event){
            console.log("TouchCancle")
        })
    }
}

鼠标事件只会在桌面平台才会触发,属于节点事件

const {ccclass, property} = cc._decorator;

@ccclass
export default class SysEvent extends cc.Component {

    start () 
    {
        //当鼠标在目标节点区域按下时触发一次
        this.node.on(cc.Node.EventType.MOUSE_DOWN,function(event){
            console.log("MouseDown")
        },this)

        //当鼠标移入目标节点区域时,不论是否按下
        this.node.on(cc.Node.EventType.MOUSE_ENTER,function(event){
            console.log("MouseEnter")
        })

        //当鼠标在目标节点在目标节点区域中移动时,不论是否按下
        this.node.on(cc.Node.EventType.MOUSE_MOVE,function(event:cc.Event.EventMouse){
            console.log(event.getLocation())
        })

        //当鼠标移出目标节点区域时,不论是否按下
        this.node.on(cc.Node.EventType.MOUSE_LEAVE,function(event){
            console.log("MouseLevel")
        })

        //当鼠标从按下状态松开时触发一次
        this.node.on(cc.Node.EventType.MOUSE_UP,function(event){
            console.log("MouseUp")
        })

        //当鼠标滚轮滚动时
        this.node.on(cc.Node.EventType.MOUSE_WHEEL,function(event:cc.Event.EventMouse){
            console.log(event.getScrollY())
        })
    }
}

使用dispatchEvent派发可以冒泡的形式一层一层向父物体传递事件。

image.png

//Label
const {ccclass, property} = cc._decorator;

@ccclass
export default class Helloworld extends cc.Component {

   start()
   {
       this.node.on("say",function(){
        console.log(this.node.name + ":Hello")
       }.bind(this))

       //派送自定义事件 是否冒泡传递
       this.node.dispatchEvent(new cc.Event.EventCustom("say",true))
   }
}
//Background、Btn、Canvas
const {ccclass, property} = cc._decorator;

@ccclass
export default class LoadTest extends cc.Component {

    start () {
        
        this.node.on("say",function(event){
            console.log(this.node.name + ":Hello")
            if(this.node.name == "Btn")
            {
                event.stopPropagation() //停止向上派送事件
            }
        }.bind(this))
    }

    onDestroy()
    {
        //关闭监听事件
        this.node.off("say")
    }
}


image.png


const {ccclass, property} = cc._decorator;

@ccclass
export default class LoadTest extends cc.Component {

    @property(cc.Sprite)
    spr:cc.Sprite = null

    private remoteTex:cc.Texture2D = null

    start () {
        //监听一次事件
        this.spr.node.once("mousedown",this.onMouseClick.bind(this))
        //监听事件
        this.spr.node.on("say",function(msg){
            console.log(msg)
        })
    }

    onMouseClick(event)
    {
        //发射事件
        this.spr.node.emit("say","HelloWrold")
    }

    onDestroy()
    {
        //关闭监听事件
        this.spr.node.off("say")
    }
}


批注 2019-07-15 215516.png


const {ccclass, property} = cc._decorator;

@ccclass
export default class LoadTest extends cc.Component {

    @property(cc.Sprite)
    spr:cc.Sprite = null

    private remoteTex:cc.Texture2D = null

    start () {
        let self = this
        cc.loader.loadRes("111",cc.Texture2D,function(err,tx){ //动态加载resources目录下的图片
            let sf = new cc.SpriteFrame()
            sf.setTexture(tx)
            self.spr.spriteFrame = sf
        })

        cc.loader.loadRes("testPlist",cc.SpriteAtlas,function(err,atlas:cc.SpriteAtlas){ //动态加载resources目录下的图集
            let sf = atlas.getSpriteFrame("logo-111")
            self.spr.spriteFrame = sf
        })

        let url = "http://www.chicai.group/uploads/ueditor/php/upload/image/20190605/1559744982223328.png"
        cc.loader.load({url:url,type:"png"},function(err,tx){ //加载远程的图片资源
            let sf = new cc.SpriteFrame()
            sf.setTexture(tx)
            self.spr.spriteFrame = sf
            self.remoteTex = tx
        })

        //cc.loader.loadResDir() //加载在resources下的一整个文件夹
        //cc.loader.releaseResDir()
    }

    onDestroy(){
        cc.loader.releaseRes("111",cc.Texture2D)
        cc.loader.releaseRes("testPlist",cc.SpriteAtlas)
        cc.loader.releaseAsset(this.remoteTex)
    }
}

image.png


创建场景资源后,可以选中场景,然后在右边的属性检查器中勾选自动释放资源,然后保存就可以在加载其他场景的时候自动把资源释放掉了。

release-resources.png