const {ccclass, property} = cc._decorator; @ccclass export default class NetStuidy extends cc.Component { start () { let ws = new WebSocket("ws://echo.websocket.org"); ws.onopen = function (event) { console.log("Send Text WS was opened."); }; ws.onmessage = function (event) { console.log("response text msg: " + event.data); }; ws.onerror = function (event) { console.log("Send Text fired an error"); }; ws.onclose = function (event) { console.log("WebSocket instance closed."); }; setTimeout(function () { if (ws.readyState === WebSocket.OPEN) { ws.send("Hello WebSocket, I'm a text message."); } else { console.log("WebSocket instance wasn't ready..."); } }, 3); } }
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派发可以冒泡的形式一层一层向父物体传递事件。
//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") } }
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") } }
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) } }