模块导入
在文件头加上 import {common}from"./common"
中括号内是 类名 from 后面是模块名 , 在被导入的模块名类名的前面,要加入 export 代表导出
列:
'main.ts'
import { conmmon } from "./common";
let z = new conmmon()
'common.ts'
export class conmmon {
speed:nuber=1
}
开启物理碰撞
在onload()方法内加入
cc.director.getCollisionManager().enabled = true
碰撞事件回调
//碰撞产生时自动调用 一般使用这个
onCollisionEnter(other, self) {//other 产生碰撞的另一个碰撞组件 self 产生碰撞的自身的碰撞组件
other.node.getComponent(cc.BoxCollider).enabled = false//关闭对方的碰撞引擎
console.log('发生了一次碰撞');
}
//碰撞产生后,结束碰撞前调用
onCollisionStay: function (other, self) {
console.log('正在发生激烈的碰撞');
}
// 当碰撞结束后调用
onCollisionExit: function (other, self) {
console.log('结束碰撞');
}
监听屏幕触摸 拖动
在onload()方法内加入
this.node.on(cc.Node.EventType.TOUCH_MOVE, function (event) {
var W_poss = event.getLocation();
let pos = this.node.parent.convertToNodeSpaceAR(W_poss);
this.node.setPosition(pos)
}.bind(this), this);
计时器
//每3秒执行一次以下代码
this.schedule(function () {
//写在这里
},3);
//延后1秒执行, 只执行一次
this.scheduleOnce(function () {
//写在这里
}, 1);
对象池
初始化对象池
// 初始化对象池 ,返回一个拥有对象的对象池,回调函数,输入拥有unuse()方法的预制体的脚本名字
batchInitObjPool(预制体: cc.Prefab, 数量: Number, 回调函数: string) {
let newpool = new cc.NodePool(回调函数)
for (let i = 0; i < 数量; ++i) {
let butllet = cc.instantiate(预制体); // 创建节点
newpool.put(butllet); // 通过 put 接口放入对象池
}
return newpool
}
从对象池中获取对象
从对象池中获取对象,如果没有对象了,会创建一个预制体,返回获取的对象节点
genNewNode(对象池: cc.NodePool, 预制体: cc.Prefab, 节点树: cc.Node) {
if (对象池.size() > 0) { //如果bullet不是一个组件
var newnode = 对象池.get(对象池)//get一下 将对象池作为参数传到回调函数里
} else {
var newnode = cc.instantiate(预制体)//重新创建一个预制体
}
节点树.addChild(newnode) //添加到节点树
return newnode
}
放回对象池
backObjPool(对象池: cc.NodePool, 节点: cc.Node) {
// enemy 应该是一个 cc.Node
对象池.put(节点); // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent
}
```